__getattr__ 等价于方法

Posted

技术标签:

【中文标题】__getattr__ 等价于方法【英文标题】:__getattr__ equivalent for methods 【发布时间】:2011-04-20 18:43:04 【问题描述】:

当一个属性没有找到时,object.__getattr__ 被调用。有没有等效的方法来拦截未定义的方法?

【问题讨论】:

【参考方案1】:

没有区别。方法也是属性。 (但是,如果您希望该方法具有隐式的“self”参数,则必须做更多的工作来“绑定”该方法)。

【讨论】:

第二,一切都是对象,不管是intstr还是function【参考方案2】:

方法也是属性。 __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

【讨论】:

【参考方案3】:

你没有返回任何东西。

class A(object):

  def __getattr__(self, attr):
    return attr

应该工作

【讨论】:

以上是关于__getattr__ 等价于方法的主要内容,如果未能解决你的问题,请参考以下文章

__getattr__,settr

python __getattr__

类 __getitem__ __getattr__ __call__

Python的__getattr__和__getattribute__

理解_getattr_方法

python中__getattr__和__getattribute__区别