重複の可能性:
Python: クラス属性とインスタンス属性の違い
今日の仕事で、オブジェクトのディクショナリが正しい値を保持していない理由を突き止めようと、pdb で約 3 時間を費やしました。
これは、何が起こっていたかの素晴らしいテンプレートです。
class A:
prop = {}
def __init__(self, test):
temp = self.method(test)
for i in temp.keys():
self.prop[i] = temp[i]
def method(self, test):
return ({ 'x': test, 'y': test })
a = A(3)
b = A(4)
print a.prop
print b.prop
戻ります
{'y': 4, 'x': 4}
{'y': 4, 'x': 4}
問題は 2 行目にあると考えました。a.prop と b.prop の両方のメモリ位置を確認しましたが、同じでした。
イニシャライザー/コンストラクターの外側のクラスでインスタンス化されるため、各プロパティに新しいスペースを割り当てますが、prop に新しいスペースを割り当て、同じメモリ位置を格納します。したがって、オブジェクトとして定義されたものを除いて、a と b の他のすべてのプロパティは正しい (異なる) ものでした。
これは予想される動作ですか?私はこれがC ++のようなものでどのように機能するかを知っています(その時点で、それらはちょっと静的だからですよね?)。
なぜPythonがこのように扱うのか、誰かが私に説明できますか? それ以外の場合は静的に指定できる場合、特定のアプリケーションはありますか?