我有一个python类的实例。
class Fum(object):
foo = Foo()
bar = Bar()
fum = Fum()
由于我不想进入的充分理由,我想用猴子修补该对象,以便在某些用例中其属性之一是禁止进入的。我希望如果我或其他开发人员尝试在猴子修补的对象上使用该属性,则会引发一个有用的异常来解释这种情况。我试图用一个属性来实现它,但是没有运气。
例如。,
def raiser():
raise AttributeError("Don't use this attribute on this object. Its disabled for X reason.")
fum.bar = property(raiser)
>>> fum.bar
>>> <property object at 0xb0b8b33f>
我想念什么?
最佳答案
您不能将属性直接猴子修补到对象的实例上。 descriptors
是类级别的概念,必须在实例的类层次结构中。有一个有效的技巧,但是:
class Fum(object):
foo = Foo()
bar = Bar()
fum = Fum()
class DerivedFum(fum.__class__):
bar = property(raiser)
fum.__class__ = DerivedFum
fum.bar # --> raise AttributeError