__getattr__ 方法的等效实现

18 投票
3 回答
7310 浏览
提问于 2025-04-16 04:58

当找不到某个属性时,会调用 object.__getattr__ 这个方法。那么,有没有类似的方法可以用来拦截那些未定义的方法呢?

3 个回答

0

你没有返回任何东西。

class A(object):

  def __getattr__(self, attr):
    return attr

应该可以正常工作。

12

其实没有什么区别。方法也是一种属性。不过,如果你想让这个方法自动带上一个“self”参数,那你就需要做一些额外的工作来“绑定”这个方法。

10

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

撰写回答