私は、Pythonがインスタンス変数を処理する方法に奇妙な変わり点があることに気付いたとき、簡単なスクリプトに取り組んでいました。なぜPythonはインスタンス変数をオブジェクト間の共有として扱うのでしょうか?
class Spam(object):
eggs = {}
def __init__(self, bacon_type):
self.eggs["bacon"] = bacon_type
def __str__(self):
return "My favorite type of bacon is " + self.eggs["bacon"]
そして、我々は別の引数を持つこのオブジェクトの2つのインスタンスを作成:
spam1 = Spam("Canadian bacon")
spam2 = Spam("American bacon")
print spam1
print spam2
結果は不可解されています
My favorite type of bacon is American bacon
My favorite type of bacon is American bacon
それを
は、我々は単純なオブジェクトを持っていると言います"卵"辞書は、すべての異なる "迷惑メール"インスタンス間で共有されているようです - どちらか、それとも新しいインスタンスが作成されるたびに上書きされます。私たちは、初期化関数でインスタンス変数を宣言することによってそれを解決することができますので、これは、本当に毎日の生活の中で問題ではありません。このように書かれたコードとclass Spam(object):
def __init__(self, bacon_type):
self.eggs = {}
self.eggs["bacon"] = bacon_type
def __str__(self):
return "My favorite type of bacon is " + self.eggs["bacon"]
spam1 = Spam("Canadian bacon")
spam2 = Spam("American bacon")
print spam1
print spam2
、結果は我々が期待するものである。
My favorite type of bacon is Canadian bacon
My favorite type of bacon is American bacon
私はこの振る舞いを支持していませんが、なぜPythonがこのように動作するのか理解できません。誰かがこれについていくつかの光を当てることができますか?
[インスタンス間でPythonクラスのデータを共有しないようにするにはどうすればいいですか?](http://stackoverflow.com/questions/1680528/how-do-i-avoid-having-python-class-data-shared -among-instances) –