为什么在Python中,派生类的两个不同实例共享与基类相同的数据属性值?

时间:2014-02-15 03:00:40

标签: python class inheritance

如果我有一个继承自init()将项添加到数组的基类的子类,如下所示:

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。

为什么该基类实例由两者共享而不是作为新实例创建?对于人们如何期望继承行为,这似乎并不直观。

1 个答案:

答案 0 :(得分:0)

class TestBaseClass : 
    arr = []

在这里,您要创建一个类变量,而不是实例变量。因此,这将由该类的所有实例共享。要创建实例变量,最好将成员变量添加到初始化函数(__init__)中的当前对象,如下所示

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

由于我们将arr添加到当前对象(self),因此无论何时创建类的对象,都会创建新变量。