3

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

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]
4

2 回答 2

4

a实例变量的定义如下所示:

class test(object):
    def __init__(self):
        self.a = []

以前的方式a不是声明为实例变量,而是在类的所有实例之间共享的类变量。

于 2013-06-21T03:08:53.517 回答
3

您定义a变量。它不绑定到您的类的实例,而是绑定到类本身,因此只有一个列表在类的实例中“共享”。

您需要将其设为实例变量:

class test:
    def b(self, x):
        self.a = []
        self.a.append(x)

此外,您应该继承自object以利用新式类:

class test(object):
于 2013-06-21T03:14:10.133 回答