python类var将在obj之间共享?

时间:2014-10-25 02:44:59

标签: python class var

class cls():
    A = []

a = cls()
b = cls()
a.A.append("a")
print(b.A)

我在python 3.4上运行它。 但是我看到它打印了一个字符串""。

我无法理解为什么会这样。 a与b不同,但为什么它们共享一个变量A?

1 个答案:

答案 0 :(得分:2)

您已为班级分配了一个变量。它仅对所有实例都存在一次(只要您通过引用使用它,.append会这样做。)

你真正想要的是一个实例变量:

class cls():
    def __init__(self):
        self.A = []

a = cls()
b = cls()
a.A.append("a")
print(b.A)

此外,cls不应该用作类的名称 - 使用CamelCase名称,另外cls只应该与元类或类方法一起使用(您不太可能需要)这些中的任何一个)。