2013-02-02 32 views
1
class bambino(object): 
    counter = 7 
    def __init__(self): 
     print("bambino.counter is self.counter ?", bambino.counter is self.counter) 
     self.counter += 1 
     print("bambino.counter is self.counter ?", bambino.counter is self.counter) 

bambi1 = bambino() 
print ("bambi1.counter:", bambi1.counter) 
print ("bambino.counter:", bambino.counter) 

打印:Python实例属性从class属性获取初始值并具有相同的名称?

bambino.counter is self.counter ? True 
bambino.counter is self.counter ? False 
bambi1.counter: 8 
bambino.counter: 7 

我明白做self.counter += 1计数器成为实例的属性没有的类。

但为什么bambi1.counter把它的从bambino.counter初始值?

回答

5

如果一个对象没有找到一个属性,它在层次结构得到抬头走高,首先在它的类,然后,如果没有找到,在超。

self.counter += 1相当于self.counter = self.counter + 1。因此,要分配bambi1.counter,Python首先需要获得值bambi1.counter。由于bambi1最初并没有counter,python没有找到它并且必须在它的类中查找它。

PS:请大写你的班级名称。

+1

可能是值得一提的是,该行为是可变对象不同,当他们刚刚修改,而不是重新分配。 – ThiefMaster

+1

它本身并不是可变性,而是一些类型具有'+ ='重载,以改变对象的位置。 –

+0

啊我甚至没有想到'+ ='情况,但更一般的情况下,像'富= {}'的类,然后'self.foo [..] = ..' – ThiefMaster

相关问题