Lei*_*Kan -1 python class list
class Number():
list = []
number = Number()
number.list.append(0)
print number.list # [0]
newNumber = Number()
newNumber.list.append(1)
print newNumber.list # [0,1]
Run Code Online (Sandbox Code Playgroud)
我创建了两个实例,为什么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
Run Code Online (Sandbox Code Playgroud)
Ant*_*ony 10
那是因为您创建了列表作为类对象的成员,而不是实例对象.如果你想为每个实例创建一个单独的列表,你需要做这样的事情(我改变了list
,list_
因为给变量赋予与builtins相同的名称是不好的做法).
class Number():
def __init__(self):
self.list_ = []
Run Code Online (Sandbox Code Playgroud)
当您访问对象的属性时,它首先检查实例字典,然后检查类对象字典.这就是为什么使它成为类对象的成员并没有给你任何错误.但由于它只是一个列表,因此每个对象都将访问同一个列表.