5

Pythonクラスのインスタンスがあります。

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

fum = Fum()

入りたくない正当な理由で、このオブジェクトにモンキーパッチを適用して、特定のユースケースでその属性の1つが立ち入り禁止になるようにします。私または将来の別の開発者がモンキーパッチを適用したオブジェクトの属性を使用しようとすると、状況を説明する有用な例外が発生することをお勧めします。プロパティを使用してこれを実装しようとしましたが、うまくいきません。

例えば、

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>

私は何が欠けていますか?

4

1 に答える 1

4

プロパティをオブジェクトのインスタンスに直接モンキーパッチすることはできません。descriptorsはクラスレベルの概念であり、インスタンスのクラス階層に含まれている必要があります。ただし、機能するトリックがあります。

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

fum = Fum()

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

fum.__class__ = DerivedFum

fum.bar # --> raise AttributeError
于 2012-11-08T18:10:34.303 に答える