gpt4 book ai didi

python - 猴子补丁在尝试使用对象的特定属性时引发 AttributeError

转载 作者:太空狗 更新时间:2023-10-30 01:16:29 25 4
gpt4 key购买 nike

我有一个 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>

我错过了什么?

最佳答案

您不能直接将属性猴子修补到对象的实例上。 描述符 是一个类级别的概念,必须位于实例的类层次结构中。然而,有一个技巧是有效的:

class Fum(object):
foo = Foo()
bar = Bar()

fum = Fum()

class DerivedFum(fum.__class__):
bar = property(raiser)

fum.__class__ = DerivedFum

fum.bar # --> raise AttributeError

关于python - 猴子补丁在尝试使用对象的特定属性时引发 AttributeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13294981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com