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

Python中如何让多个子类共享同一个父类实例及公共变量

问题根源

你对继承的理解存在偏差:Python 中的继承是类层面的属性/方法复用机制,每次实例化子类时都会生成完全独立的实例对象,你在__init__方法中赋值给self.xxx的属性都属于当前实例独有,不同实例之间天然互不影响,所以你原来的代码才会输出两个不同的值。

解决方案

方案1:使用父类类属性实现全局共享

如果你的需求是所有子类实例全局共享相同的变量,可以直接把需要共享的变量定义为父类的类属性,不要在__init__中赋值给实例本身:

class Parent:
    # 类属性属于父类本身,所有子类实例共享同一份
    var1 = None


class Child1(Parent):
    def __init__(self, var1):
        # 直接修改父类的类属性,所有子类实例都会同步变更
        Parent.var1 = var1


class Child2(Parent):
    def __init__(self, var1):
        Parent.var1 = var1


child1 = Child1(1)
print(child1.var1)  # 输出1
child2 = Child2(2)
print(child1.var1)  # 输出2
print(child2.var1)  # 输出2

该方案实现简单,不需要额外传参,缺点是类属性为全局共享,无法实现多组子类实例分别共享不同的变量。

方案2:通过组合持有同一个父类实例

如果你需要更灵活的分组共享能力,推荐使用你后续要学习的组合模式:先实例化父类,再把同一个父类实例传给所有需要共享变量的子类:

class Parent:
    def __init__(self):
        self.var1 = None


class Child1:
    def __init__(self, parent: Parent, var1):
        self.parent = parent
        self.parent.var1 = var1
    
    @property
    def var1(self):
        return self.parent.var1


class Child2:
    def __init__(self, parent: Parent, var1):
        self.parent = parent
        self.parent.var1 = var1
    
    @property
    def var1(self):
        return self.parent.var1


# 实例化公共父类,传给所有需要共享变量的子类
shared_parent = Parent()
child1 = Child1(shared_parent, 1)
child2 = Child2(shared_parent, 2)

print(child1.var1)  # 输出2
print(child2.var1)  # 输出2

# 需要独立分组时再实例化新的父类即可
another_parent = Parent()
child3 = Child1(another_parent, 3)
print(child3.var1) # 输出3,和前两个实例互不影响

该方案耦合度低、灵活性高,是这类场景更推荐的实现方式。

内容的提问来源于stack exchange,提问作者Jonas M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:39:03