是否有可能对 a 的值进行猴子修补?@property
我无法控制的类的实例?
class Foo:
@property
def bar(self):
return here().be['dragons']
f = Foo()
print(f.bar) # baz
f.bar = 42 # MAGIC!
print(f.bar) # 42
显然,当尝试分配给以上内容时会产生错误f.bar
. Is # MAGIC!
有可能以任何方式吗?实施细则@property
是一个黑匣子,不能间接进行猴子修补。整个方法调用需要替换。它只需要影响单个实例(如果不可避免,类级修补是可以的,但更改的行为必须仅选择性地影响给定实例,而不是该类的所有实例)。
子类化基类(Foo
)并使用以下命令更改单个实例的类以匹配新的子类__class__
属性:
>>> class Foo:
... @property
... def bar(self):
... return 'Foo.bar'
...
>>> f = Foo()
>>> f.bar
'Foo.bar'
>>> class _SubFoo(Foo):
... bar = 0
...
>>> f.__class__ = _SubFoo
>>> f.bar
0
>>> f.bar = 42
>>> f.bar
42
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)