2014-02-15 20 views
1

如果我有一个从基类,它的init()添加到数组中的项继承,如下一个子类:为什么在Python中派生类的两个不同实例与基类共享相同的数据属性值?

class TestBaseClass : 
    arr = [] 

    def __init__(self) : 
     print self.arr 
     self.arr.append(1) 
     print self.arr 
     return 

class TestChildClass1(TestBaseClass) : 
    foo = 1 

然后我觉得奇怪的是,当我实例孩子上课两次,

test1 = TestChildClass1() 
test2 = TestChildClass1() 

第二个似乎没有一个空数组,但包含由第一个添加的值1。

为什么这个基类实例被两者共享而没有创建为新实例?这似乎并不直观,人们如何期望继承的行为。

回答

0
class TestBaseClass : 
    arr = [] 

在这里,你正在创建一个类变量,而不是一个实例变量。所以,这将由该类的所有实例共享。要创建实例变量,成员变量更好地添加到当前对象的初始化函数(__init__)这样

def __init__(self): 
    self.arr = [] 
    ... 

因为我们添加arr当前对象(self),只要您创建的类的对象,新的变量将被创建。

+0

错误的答案,即使在实例变量的情况下,相同的变量将在派生类之间共享 – SEDaradji

相关问题