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

Смежные вопросы