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

Python如何实现外层类存储内层类实例列表?现有代码问题如何修正?

Python嵌套类存储结构实现方案

现有代码问题分析

你的代码存在两个核心逻辑错误:

  • 外层类outerClass的初始化方法中,错误将内部类innerClass的类引用覆盖为了单个实例对象,导致后续无法再创建新的内部类实例
  • 循环中反复修改同一个内部类实例的属性,向列表追加的是同一个对象的引用,最终列表中所有元素都会和最后一次修改的结果完全一致

合理实现方式

直接将内部类的实例化逻辑拆分到需要新增内部实例的场景即可,同时可以把自定义初始化参数的逻辑合并到__init__方法中,更符合Python编码规范:

class OuterClass:
    def __init__(self, name, variable1, variable2):
        self.name = name
        self.variable1 = variable1
        self.variable2 = variable2
        self.inner_instances = []  # 存储内部类实例的列表

    # 定义内部类
    class InnerClass:
        def __init__(self, id, c, variable1, variable2):
            self.id = id
            self.c = c
            self.variable1 = variable1
            self.variable2 = variable2

    # 封装新增内部实例的方法,降低耦合
    def add_inner_instance(self, id, c, variable1, variable2):
        new_inner = self.InnerClass(id, c, variable1, variable2)
        self.inner_instances.append(new_inner)


# 测试代码
if __name__ == "__main__":
    # 创建外层实例
    outer1 = OuterClass("Outerinstance1", "外层变量1", "外层变量2")
    # 批量添加内层实例
    for a in range(3):
        outer1.add_inner_instance(a, f"字符{a}", f"内层变量{a}-1", f"内层变量{a}-2")

    # 按照你期望的结构输出
    print(outer1.name)
    print(f"    {outer1.variable1}")
    print(f"    {outer1.variable2}")
    for idx, inner in enumerate(outer1.inner_instances):
        print(f"    Innerinstance{idx+1}")
        print(f"        {inner.variable1}")
        print(f"        {inner.variable2}")

运行输出示例

Outerinstance1
    外层变量1
    外层变量2
    Innerinstance1
        内层变量0-1
        内层变量0-2
    Innerinstance2
        内层变量1-1
        内层变量1-2
    Innerinstance3
        内层变量2-1
        内层变量2-2

该实现支持灵活新增任意数量的内层实例,每个实例都是独立的对象,不会出现属性互相覆盖的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:06:02