首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中有什么特殊的方法来处理AttributeError?

Python中有什么特殊的方法来处理AttributeError?
EN

Stack Overflow用户
提问于 2010-03-01 04:55:36
回答 3查看 2K关注 0票数 3

什么特殊方法?我是否应该在我的类中重新定义,以便它处理AttributeError的异常,并在这些情况下返回一个特殊值?

例如,

代码语言:javascript
运行
复制
>>> class MySpecialObject(AttributeErrorHandlingClass):
      a = 5
      b = 9
      pass
>>>
>>> obj = MySpecialObject()
>>>
>>> obj.nonexistent
'special value'
>>> obj.a
5
>>> obj.b
9

我用谷歌搜索了一下答案,但没有找到。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-01 05:31:33

Otto Allmendinger提供的如何使用__getattr__的示例使它的使用变得过于复杂。您只需定义所有其他属性,如果缺少一个属性,Python将依赖于__getattr__

示例:

代码语言:javascript
运行
复制
class C(object):
    def __init__(self):
        self.foo = "hi"
        self.bar = "mom"

    def __getattr__(self, attr):
        return "hello world"

c = C()
print c.foo # hi
print c.bar # mom 
print c.baz # hello world
print c.qux # hello world
票数 6
EN

Stack Overflow用户

发布于 2010-03-01 04:58:50

你有覆盖__getattr__,它是这样工作的:

代码语言:javascript
运行
复制
class Foo(object):
    def __init__(self):
        self.bar = 'bar'

    def __getattr__(self, attr):
          return 'special value'

foo = Foo()
foo.bar # calls Foo.__getattribute__() (defined by object), returns bar
foo.baz # calls Foo.__getattribute__(), throws AttributeError, 
        # then calls Foo.__getattr__() which returns 'special value'. 
票数 2
EN

Stack Overflow用户

发布于 2010-03-01 04:58:15

我不清楚你的问题,但听起来你在寻找__getattr__,可能还有__setattr____delattr__

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2352630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档