0

我在python中遇到了这种奇怪的行为。我想制作两个不同的类实例Numbers

class Numbers:
   numberList=[]

   def __init__(self, *arg):
      for number in arg:
         self.numberList.append(number)


numbers=Numbers(4, 8)    # Instance 1
numbers=Numbers(7, 5, 3) # Instance 2
print(numbers.numberList)

输出:

[4, 8, 7, 5, 3]

预期输出:

[7, 5, 3]

我认为我进行类实例化的代码部分与New其他语言中关键字的使用相同。然而结果却完全不同。这是为什么?我想instance 1完全替换instance 2,而不是将两者连接起来。

4

1 回答 1

2

在下面的代码中,numberList是所有类实例共享的类变量。

>>> class Numbers:
...     numberList = []
... 
>>> n1 = Numbers()
>>> n2 = Numbers()
>>> Numbers.numberList is n1.numberList
True
>>> Numbers.numberList is n2.numberList
True

更改如下以获取每个实例的实例变量(在 Python 中称为数据属性):

class Numbers:
    def __init__(self, *arg):
        self.numberList = []
        for number in arg:
            self.numberList.append(number)
于 2013-08-11T13:34:11.983 回答