类保留了预期新实例的先前内容

时间:2013-06-21 03:07:05

标签: python

我定义了一个类,以及一个创建该类实例的函数。我认为这个函数每次都应该创建一个新实例。但是,看起来它“继承”了上次调用的内容。有谁能解释一下?谢谢!

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]

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):