2016-11-10 9 views
0

私はPythonのクラス変数がすべてのインスタンスに対して同じメモリ位置を持つことを認識しましたが、なぜインスタンスのクラス変数を変更しても他のインスタンスやクラス自体に影響しないのですか?以下のコードを参照してください:すべてのインスタンスに対してpythonのクラス変数が変更されないのですか?

class (object): 
    name = 'Donald ' 
    def __init__(self): 
     self.x = 4 
c = Sam() 
z = Sam() 
print hex(id(c.name)), hex(id(z.name)), hex(id(Sam.name)) 
print c.name, z.name 

c.name = 'Trump' 
print c.name, z.name, US_President.name 
print hex(id(c.name)), hex(id(z.name)), hex(id(US_President.name)) 

US_President.name = 'Obama' 
print c.name, z.name, US_President.name 


Output: 
0x7f227776a930 0x7f227776a930 0x7f227776a930 
Donald Donald 
Trump Donald Donald 
0x7f227776a420 0x7f227776a930 0x7f227776a930 
Trump Obama Obama 

誰かこの動作を説明してください。事前に感謝します

答えて

0

インスタンスの属性に割り当てる場合、その名前はインスタンス変数になります。同じ名前のクラス変数がある場合、その特定のインスタンスでは非表示になりますが、そのクラスの他のインスタンスではまだアクセス可能です。クラス変数を変更する場合は、クラス変数をインスタンスではなくクラスに割り当てる必要があります。

+0

ありがとうございます!ええ、私はこのトリックを逃した:) – Sam1313

関連する問題