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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:18:22