A
とB
の2つのクラスがあります。B
はA
から継承し、プロパティをオーバーライドします。 A
は私のコントロール下にないので変更できません。次のようにクラス階層内外の呼び出し側を区別する
コードが見えます:
class A():
def __init__(self, value):
self.value = value
@property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = value
class B(A):
def __init__(self, value):
super(B, self).__init__(value)
@property
def value(self):
return super(B, self).value
@value.setter
def value(self, value):
raise AttributeError("can't set attribute")
私は明らかにAttributeError: can't set attribute
を得るB(1)
を呼び出すしようとします。私はvalue
がモジュールinspect
が知られている機能のリストに対してチェックを除いて、私はこれを行うに十分な情報を提供していないようですクラスメソッド
@value.setter
def value(self, value):
if set from inside class hierarchy:
pass
else:
raise AttributeError("can't set attribute")
内から設定されているときに、異なる振る舞いを持ちたい
。
は、あなただけの代わりに、 'self.value'の' self._value'を設定することができませんか?プロパティは、オブジェクト自体の内部でなくても、外界へのAPIとして存在します。 – acdr
スタックトレースを調べて、発信者が誰であるかを調べることができます。 – Norman
@acdr、残念ながら 'A'は私のコントロール下にないので、動作する方法を変更することはできません。私はそれを反映するために質問を編集しました。 – Dumitru