You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的子列表只有objectB
  • objectB的子列表只有objectC
    这样就能正确实现目录的嵌套关系,每个目录只管理自己的直接子目录。

内容的提问来源于stack exchange,提问作者thib_clz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:57:42