我在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
完全替换,而不是连接两者。
答案 0 :(得分: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)