如何使用super()更新父类特定实例属性并写入其列表?
问题分析与解决方案
你的问题核心在于类属性和实例属性的混淆:Sub1里定义的list = []是类属性,所有Sub1及其子类的实例都会共享这个列表,所以两个Sub2实例添加的内容都会跑到同一个列表里。要操作父类的特定实例列表,你需要把这个列表改成实例属性,让每个Sub1实例拥有自己独立的列表。
修改后的代码示例
#!/usr/bin/env python # test.py class Master(object): def __init__(self): pass class Sub1(Master): def __init__(self): # 把类属性改成实例属性,每个Sub1实例都有自己的list self.list = [] class Sub2(Sub1): def __init__(self, name): # 先调用父类的__init__,确保实例属性被初始化 super(Sub2, self).__init__() # 直接操作当前实例的list(继承自Sub1的实例属性) self.list.append(name) m = Master() m.foo = Sub1() m.foo.bar = Sub2('something') m.bla = Sub1() m.bla.blub = Sub2('else') print(m.foo.list) # 输出: ['something'] print(m.bla.list) # 输出: ['else']
关键修改点说明
- 将
Sub1的类属性改为实例属性:在Sub1的__init__方法里初始化self.list = [],这样每个Sub1实例都会创建属于自己的列表,不再共享。 - 调用父类的
__init__方法:Sub2继承自Sub1,所以在Sub2的__init__里必须先通过super()调用Sub1的__init__,确保self.list被正确初始化。 - 操作实例属性而非类属性:
self.list会指向当前Sub2实例对应的Sub1实例的列表,这样添加的内容只会进入该特定实例的列表中。
这样修改后,每个Sub1实例的列表都是独立的,你就能实现“操作父类特定实例的列表”的需求了。
内容的提问来源于stack exchange,提问作者boseki
相关产品推荐
相关产品推荐

