Какой специальный метод в Python обрабатывает AttributeError? - PullRequest
3 голосов
/ 28 февраля 2010

Какой специальный метод (ы) мне следует переопределить в моем классе, чтобы он обрабатывал AttributeError s исключения и возвращал специальное значение в этих случаях?

Например,

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

Я гуглил ответ, но не смог его найти.

Ответы [ 3 ]

4 голосов
/ 01 марта 2010

Пример использования __getattr__ от Otto Allmendinger усложняет его использование. Вы просто определили бы все другие атрибуты и - если один отсутствует - 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 голос
/ 28 февраля 2010

У вас есть переопределить __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'. 
1 голос
/ 28 февраля 2010

Ваш вопрос мне не понятен, но похоже, что вы ищете __getattr__ и, возможно, __setattr__ и __delattr__.

...