__setattr__
を定義すると、クラスで定義するすべてのsetterメソッド/プロパティがオーバーライドされます。フィールドにプロパティが存在する場合は、プロパティで定義されたセッターメソッドを使用し、それ以外の場合はself.__dict__[name] = value
を使用します。プロパティを持たないフィールドの代入には__setattr__を定義する必要がありますが、プロパティが定義されたフィールドにはsetter/getter関数を使用する必要があります。
ヘルプ!私は__setitem__
を使用する1つの解決策を見つけましたが、これは私にとっては役に立ちません
ここで、プロパティはPythonクラスに格納されていますか?どうすればそれらにアクセスできますか?
セッターメソッドが定義されているフィールドのプロパティを使用するように、__setattr__
を定義するにはどうすればよいですか?また
class test(object):
def _get_gx(self):
print "get!"
return self.__dict__['gx']
def _set_gx(self, gx):
print "set!"
self.__dict__['gx'] = gx
gx = property(_get_gx, _set_gx)
def __setattr__(self, name, value):
self.__dict__[name] = value
def __init__(self):
pass
、
はなぜ "を取得!" です
x = test()
x.gx = 4
x.gx
prints:
"gets!"
"gets!"
4
あなたのインデントが壊れた状態でこれを処理するのは難しいでしょう。あなたが尋ねる唯一の一般的な質問は「記述子はどこに住んでいますか」であり、答えはクラスdictにあります。 – aaronasterling
これらはクラス辞書にはありません。私が定義したプロパティは、クラス辞書には表示されません。 – HaltingState
あなたは何か間違っている。記述子はクラス辞書に存在します。詳細については、Pythonデータモデルを見てください。あなたがインデントを修正したら、私はあなたのためにそれを把握します。 – aaronasterling