私は幾分奇妙な振る舞いに出くわしました。Python 3.5の取り扱いが不思議です。
class Example:
test = []
def __init__(self):
print(self.test)
self.test.append(0)
ex1 = Example()
ex2 = Example()
ex3 = Example()
私は出力[]たびにこれを期待する、しかし、私が取得:
[]
[0]
[0, 0]
この魔法は何ですか?私が理解するのを助けてくれますか?
ありがとうございます!
編集: お返事ありがとうございました。
"test"が静的な場合、 "self.test.append(0)"を "self.test = [0]"に置き換えたときに、この現象に気付かないのはなぜですか?
'test'は、* instance *の属性ではなく、* class *属性です。このようなメンバーを「宣言」しようとしないでください。 '__init__'でそれらを作成する必要があります。 –
«なぜself.test.append(0)を "self.test = [0]"に置き換えるとこの動作に気付かないのですか?»これは新しいオブジェクトをインスタンス属性 'self.test'にバインドするため、これは 'Example.test'クラスの属性をシャドーします。 'self.test.append(0)'を実行するのは、単に既存のオブジェクトを変更するだけです。 –