如果我有一个继承自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。
为什么该基类实例由两者共享而不是作为新实例创建?对于人们如何期望继承行为,这似乎并不直观。
答案 0 :(得分:0)
class TestBaseClass :
arr = []
在这里,您要创建一个类变量,而不是实例变量。因此,这将由该类的所有实例共享。要创建实例变量,最好将成员变量添加到初始化函数(__init__
)中的当前对象,如下所示
def __init__(self):
self.arr = []
...
由于我们将arr
添加到当前对象(self
),因此无论何时创建类的对象,都会创建新变量。