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
相关产品推荐
相关产品推荐

