2016-11-10 107 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