__getattr__ 等价于方法
Posted
技术标签:
【中文标题】__getattr__ 等价于方法【英文标题】:__getattr__ equivalent for methods 【发布时间】:2011-04-20 18:43:04 【问题描述】:当一个属性没有找到时,object.__getattr__
被调用。有没有等效的方法来拦截未定义的方法?
【问题讨论】:
【参考方案1】:没有区别。方法也是属性。 (但是,如果您希望该方法具有隐式的“self”参数,则必须做更多的工作来“绑定”该方法)。
【讨论】:
第二,一切都是对象,不管是int
、str
还是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__ 等价于方法的主要内容,如果未能解决你的问题,请参考以下文章
类 __getitem__ __getattr__ __call__