class bag:
items = []
def add_item(self,x):
self.items.append(x)
if __name__ == "__main__":
bag1 = bag()
bag2 = bag()
bag1.add_item("water")
print(bag2.items)
我正在尝试向bag1加水,但我不知道为什么“ bag1.add_item(” water“)”将影响bag2
答案 0 :(得分:5)
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)
您要做的就是添加def __init__(self)
。
在类声明中声明变量使它们成为“类”成员,而不是实例成员。在__init__
方法中声明它们可以确保在该对象的每个新实例旁边创建一个新的成员实例。
答案 1 :(得分:4)
请注意,items = []
已被声明为类变量,因此该类的所有实例将为items
共享相同的内存位置。对于每个拥有自己的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)
有关其他详细信息,请参阅this文档。
答案 2 :(得分:-1)
以下代码应解决该问题:
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)