类中奇怪的列表行为

Cas*_*ton 1 python list

我写了一个列表作为变量的类.我有一个添加到该列表的函数和一个输出该列表的函数.

class MyClass:
    myList = []

    def addToList(self, myNumber):
        self.myList.append(myNumber)

    def outputList(self):
        for someNumber in self.myList:
            print someNumber
Run Code Online (Sandbox Code Playgroud)

现在出于一些奇怪的原因,如果我声明该类的两个单独的对象:

ver1 = MyClass()
ver2 = MyClass()
Run Code Online (Sandbox Code Playgroud)

然后在ver1上调用addToList:

ver1.addToList(3)
Run Code Online (Sandbox Code Playgroud)

然后输出ver2的列表:

ver2.outputList()
Run Code Online (Sandbox Code Playgroud)

我得到3作为版本2列表的输出!怎么了?

Jon*_*art 6

你的语法错了.您正在使用类静态变量.考虑一下:

class MyClass:
    myList = []    # Static variable

    def __init__(self):
        self.myRealList = []   # Member variable
Run Code Online (Sandbox Code Playgroud)

myList实际上是MyClass定义的一部分,因此不仅可以通过类名显示,还可以看到该类的所有实例:

c = MyClass()
c.myList = [1]
print MyClass.myList  # will print [1]
Run Code Online (Sandbox Code Playgroud)

您需要在__init__构造函数中声明常规的"成员变量" .

不要感觉不好,我从C/C++/C#世界来到python,犯了同样的错误,一开始我也很困惑.