Python中的哪种特殊方法处理AttributeError?

时间:2010-02-28 20:55:36

标签: python attributeerror

我应该在我的班级中重新定义哪些特殊方法(s?),以便处理AttributeError个异常并在这些情况下返回特殊值?

例如,

>>> class MySpecialObject(AttributeErrorHandlingClass):
      a = 5
      b = 9
      pass
>>>
>>> obj = MySpecialObject()
>>>
>>> obj.nonexistent
'special value'
>>> obj.a
5
>>> obj.b
9

我用谷歌搜索答案但找不到。

3 个答案:

答案 0 :(得分:4)

Otto Allmendinger如何使用__getattr__的例子使其使用过于复杂。您只需定义所有其他属性,如果缺少某些属性,Python将返回__getattr__

示例:

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

答案 1 :(得分:1)

我的问题不明确,但听起来您正在寻找__getattr__,可能还有__setattr____delattr__

答案 2 :(得分:1)

您已覆盖__getattr__,它的工作原理如下:

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'.