0
class Number():
    list = []

number = Number()
number.list.append(0)
print number.list  # [0]

newNumber = Number()
newNumber.list.append(1)
print newNumber.list  # [0,1]

我创建了两个实例,为什么 newNumber.list 对象有 0?为什么 number 和 newNumber 使用相同的列表?任何人都可以帮助我吗?为什么'i'在下面没有改变?

class Number:
i = 0

number = Number()
number.i = 1
print number.i  # 1

newNumber = Number()
print newNumber.i  # 0
4

1 回答 1

11

那是因为您将列表创建为类对象的成员,而不是实例对象。如果你想为每个实例创建一个单独的列表,你需要做这样的事情(我改为list因为list_给变量赋予与内置函数相同的名称是不好的做法)。

class Number():
    def __init__(self):
        self.list_ = []

当您访问对象的属性时,它首先检查实例字典,然后检查类对象字典。这就是为什么让它成为类对象的成员不会给你任何错误的原因。但由于它只是一个列表,每个对象都将访问同一个列表。

于 2013-04-27T16:17:16.417 回答