Python OOP中给Person实例添加WalkieTalkie时出现共享实例问题求助
问题原因分析:所有Person实例共享同一对讲机列表
你遇到的问题核心是把可变对象(列表)定义成了类属性,导致所有Person实例共享同一个列表。
具体原因
当你在Person类中这样定义时:
class Person: walkie_talkies = [] # 这是类属性,所有实例共用同一个列表 def add_walkie_talkie2(self, talkie): self.walkie_talkies.append(talkie)
列表是可变对象,类属性会被该类的所有实例共享。不管你创建多少个Person实例,它们的walkie_talkies指向的都是同一个内存地址里的列表。所以任何一个实例调用add_walkie_talkie2添加对讲机,都会修改这个共享列表,最终所有实例的walkie_talkies内容完全一致。
解决方法
把walkie_talkies改成实例属性,在__init__方法中初始化,让每个实例拥有独立的列表:
class Person: def __init__(self): self.walkie_talkies = [] # 每个实例创建时生成自己的列表 def add_walkie_talkie2(self, talkie): self.walkie_talkies.append(talkie)
这样每个Person实例的walkie_talkies都是独立的,添加对讲机时只会修改当前实例的列表,不会影响其他实例。
内容的提问来源于stack exchange,提问作者lolozen
相关产品推荐
相关产品推荐

