3

クラスでどのような特別なメソッドを再定義して、AttributeError例外を処理し、そのような場合に特別な値を返すようにする必要がありますか?

例えば、

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

答えをグーグルで検索しましたが、見つかりませんでした。

4

3 に答える 3

6

__getattr__Otto Allmendinger による使用方法の例は、その使用を過度に複雑にします。他のすべての属性を定義するだけで、1 つでも欠けていれば、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
于 2010-02-28T21:31:33.190 に答える
2

オーバーライドする必要があります__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'. 
于 2010-02-28T20:58:49.863 に答える
1

あなたの質問は私にはわかりませんが、あなたが探しているようで__getattr__、おそらく、、を__setattr__探しているようです__delattr__

于 2010-02-28T20:58:15.077 に答える