python - 类里面奇怪的列表行为

标签 python list

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

class MyClass:
    myList = []

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

    def outputList(self):
        for someNumber in self.myList:
            print someNumber

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

ver1 = MyClass()
ver2 = MyClass()

然后在 ver1 上调用 addToList:

ver1.addToList(3)

然后输出ver2的列表:

ver2.outputList()

我得到 3 作为版本 2 列表的输出!发生了什么事?

最佳答案

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

class MyClass:
    myList = []    # Static variable

    def __init__(self):
        self.myRealList = []   # Member variable

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

c = MyClass()
c.myList = [1]
print MyClass.myList  # will print [1]

您需要在 __init__ 构造函数中声明常规“成员变量”。

别难过,我是从 C/C++/C# 世界来到 Python 的,犯了同样的错误,一开始我也很困惑。

关于python - 类里面奇怪的列表行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221507/

相关文章:

list - 尾递归List.map

c - 从类型 'char[50]' 分配给类型 'char *' 时,类型不兼容

java - 从内存分配的角度来看 ArrayList 与 LinkedList

python - 从用户输入中获取矩阵并将其定义为列表列表时遇到问题

python - Django 投票中的错误?

python beautiful soup元内容标签

python - 在 connexion 中链接 yaml 文件时出错

python - 如何使用numpy降序排序?

python - 使用 python 替代 awk 来代替 Linux 命令

c# - Visual Studio Mac 不支持 List<string> 函数?