我定义了一个类,以及一个创建该类实例的函数。我认为这个函数每次都应该创建一个新实例。但是,看起来它“继承”了上次调用的内容。有谁能解释一下?谢谢!
class test:
a = []
def b(self,x):
self.a.append(x)
def add():
t = test()
t.b(2)
return t
if __name__ == '__main__':
print add().a
print add().a
print add().a
输出:
[2]
[2, 2]
[2, 2, 2]
答案 0 :(得分:3)
以下是a
实例变量的定义应该如何:
class test(object):
def __init__(self):
self.a = []
a
之前的方式未被声明为实例变量,而是在类的所有实例之间共享的类变量。
答案 1 :(得分:2)
您将a
定义为类变量。它不是绑定到类的实例,而是绑定到类本身,因此只有一个列表在类的实例中“共享”。
您需要将其设为实例变量:
class test:
def b(self, x):
self.a = []
self.a.append(x)
此外,您应该继承object
以使用新式类:
class test(object):