__getattr__ эквивалент для методов - PullRequest
5 голосов
/ 04 октября 2010

Когда атрибут не найден, вызывается object.__getattr__. Есть ли эквивалентный способ перехвата неопределенных методов?

Ответы [ 3 ]

10 голосов
/ 04 октября 2010

Разницы нет.Метод также является атрибутом.(Однако если вы хотите, чтобы у метода был неявный аргумент "self", вам придется проделать дополнительную работу, чтобы "связать" метод).

8 голосов
/ 04 октября 2010

Методы тоже атрибуты. __getattr__ работает для них одинаково:

class A(object):

  def __getattr__(self, attr):
    print attr

Тогда попробуйте:

>>> a = A()
>>> a.thing
thing
>>> a.thing()
thing
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
0 голосов
/ 06 апреля 2013

вы ничего не вернули.

class A(object):

  def __getattr__(self, attr):
    return attr

должно работать

...