Python 将项目添加到对象的列表中
我正在尝试向bag1中加水,但我不知道为什么“bag1.add_项(“水”)会影响bag2以下代码应该可以解决此问题:Python 将项目添加到对象的列表中,python,python-3.x,Python,Python 3.x,我正在尝试向bag1中加水,但我不知道为什么“bag1.add_项(“水”)会影响bag2以下代码应该可以解决此问题: 类包: 定义初始化(自): self.items=[] def添加_项(自身,x): self.items.append(x) 如果名称=“\uuuuu main\uuuuuuuu”: bag1=袋子() bag2=袋子() bag1.添加_项(“水”) 打印(bag2.项目) 您只需添加def\uuuu init\uuuu(self)。 在类声明中声明变量使它们成为“类”成
类包:
定义初始化(自):
self.items=[]
def添加_项(自身,x):
self.items.append(x)
如果名称=“\uuuuu main\uuuuuuuu”:
bag1=袋子()
bag2=袋子()
bag1.添加_项(“水”)
打印(bag2.项目)
您只需添加def\uuuu init\uuuu(self)
。
在类声明中声明变量使它们成为“类”成员,而不是实例成员。在
\uuuu init\uuuu
方法中声明它们可以确保在对象的每个新实例旁边创建成员的新实例,这就是您要查找的行为。注意items=[]
已声明为类变量,因此,该类的所有实例都将为项
共享相同的内存位置。为了使每个实例都有自己的项目
列表,您需要使用关键字self
,类似于:
class bag:
def __init__(self):
self.items = []
def add_item(self,x):
self.items.append(x)
if __name__ == "__main__":
bag1 = bag()
bag2 = bag()
bag1.add_item("water")
print(bag2.items)
有关更多详细信息,请参阅文档。为什么每个对象的非iterables(例如定义为类成员的整数)都可以更改,而不会影响任何其他对象,而如果单个对象附加了此列表,则此列表确实会更改?如果在创建对象后初始化类变量,则类变量将成为实例变量。您可以运行此代码进行验证。
class bag:
def __init__(self):
self.items = []
def add_item(self,x):
self.items.append(x)
if __name__ == "__main__":
bag1 = bag()
bag2 = bag()
bag1.add_item("water")
print(bag2.items)
class bag:
def __init__(self):
self.items = []
def add_item(self,x):
self.items.append(x)
if __name__ == "__main__":
bag1 = bag()
bag2 = bag()
bag1.add_item("water")
print(bag2.items)