Python 3.10.5类嵌套对象行为异常,求问题原因
问题分析与解决
问题根源
你遇到的问题和C的添加时机无关,核心原因是类变量list_of_subobjects被所有MyObject实例共享。在Python中,直接定义在类内部的变量属于类本身,所有实例会共用同一个引用。所以无论是objectA还是objectB调用add_subobject,都是往同一个列表里加元素,导致objectA的子列表里出现了不属于它的objectC。
修正后的代码
把list_of_subobjects改成实例变量,在__init__方法中初始化:
class MyObject: def __init__(self, name): self.name = name self.list_of_subobjects = [] # 每个实例拥有独立的列表 def add_subobject(self, subobject_to_add): self.list_of_subobjects.append(subobject_to_add) def see_all_subobjects(self): print(f"In '{self.name}' there are {len(self.list_of_subobjects)} objects :") for subobject in self.list_of_subobjects: print(subobject.name) objectA = MyObject("a") objectB = MyObject("b") objectC = MyObject("c") objectA.add_subobject(objectB) objectB.add_subobject(objectC) objectA.see_all_subobjects() # 现在输出: # In 'a' there are 1 objects : # b
验证说明
修改后,每个MyObject实例都会拥有自己独立的list_of_subobjects列表:
objectA的子列表只有objectBobjectB的子列表只有objectC
这样就能正确实现目录的嵌套关系,每个目录只管理自己的直接子目录。
内容的提问来源于stack exchange,提问作者thib_clz
相关产品推荐
相关产品推荐

