我是Python新手,有更多的Java背景。我了解Python中静态类变量的概念,但我注意到列表和对象的工作方式与字符串不同,例如,它们是在类的实例之间共享的。在
换句话说:
class box ():
name = ''
contents = []
def __init__ (self, name):
self.name = name
def store (self, junk):
self.contents.append(junk)
def open (self):
return self.contents
现在,如果我创建两个实例并尝试向它们添加内容:
^{pr2}$输出:
['apple','berry']
['apple','berry']
很明显它们是在box的两个实例之间共享的。在
现在,我可以通过执行以下操作来避开它:
def store (self, junk):
temp = self.contents
temp.append(junk)
self.contents = temp
但是有没有更干净/更传统的方法呢?有人能解释一下为什么会这样吗?在
关键字
self
使它们独立,就好像你在说,自身名称,属于box()
类的当前实例:两个变量都是类中的变量。但是,您为对象A和B设置了不同的字符串,实际上您正在重新初始化它们。另一方面,列表不会再次初始化,因此来自对象A和对象B的列表都指向内存中的同一对象。附加项因此会将项目追加到内存中的同一列表中。因此,结果。在
你想写这个:
相关问题 更多 >
编程相关推荐