【发布时间】:2019-05-31 20:55:02
【问题描述】:
我希望这个工作:
import types
def new_getattr(self, *args, **kwargs):
return 2
class A:
def __init__(self):
pass
a = A()
a.__getattr__ = types.MethodType(new_getattr, a)
print(a.anything)
现在,它会抛出 AttributeError: A instance has no attribute 'anything'。
我尝试了here 提出的不同解决方案,它们都有效,但不适用于__getattr__。
如果我执行print(a.__getattr__('anything')),它实际上会打印2;问题是当我执行a.anything 时不会自动调用我的__getattr__ 方法。
附带说明一下,在我的实际实现中,我不能修改类A 的定义,也不能输入它的名称并执行类似A.__getattr__ = ... 的操作(这可行),因为我需要它是通用的并且独立于类名。
编辑:我最终这样做了:
a.__class__.__getattr__ = new_getattr.
【问题讨论】:
-
你不能
a.__getattr__ = types.MethodType(new_getattr, a.__class__)吗? -
@grooveplex 我刚刚想到了!甚至像
a.__class__.__getattr__ = types.MethodType(new_getattr, a)这样的东西也可以工作。 -
太棒了!介意我将其发布为答案吗? :)
-
@grooveplex 继续!
标签: python