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

Python中父子类运行时共享全局配置变量的实现方法

实现跨父类与子类实例共享的动态全局配置变量pp

我需要一个能在运行时动态修改的全局配置变量pp,让它在父类和所有子类的实例之间共享。现有代码如下:

class Config:
    pp = 'Init'
    def __init__(self):
        pass
    
class Child(Config):
    def __init__(self, name):
        self.cc = name

par = Config()
print(f"Parent: {par.pp}")
par.pp = "123"
print(f"Parent: {par.pp}")
child = Child('XYZ')
print(f"Child-1: {child.pp} - {child.cc}")

当前输出:

Parent: Init 
Parent: 123 
Child-1: Init - XYZ

期望第三行输出为Child-1: 123 - XYZ,该如何简洁实现?


问题原因

直接执行par.pp = "123"时,是给par这个实例对象添加了一个名为pp的实例属性,它会覆盖类层面的Config.pp,但并没有修改Config类本身的pp属性。因此子类Child的实例仍然会读取类属性Config.pp的初始值Init。

解决方案

要实现全局共享,需要直接修改类属性而非实例属性。你自己找到的方法已经可以解决问题:

class Config:
    pp = 'Init'
    def __init__(self):
        pass
    def set_pp(self, val):
        type(self).pp = val

使用方式

调用实例的set_pp方法来修改类属性:

par = Config()
print(f"Parent: {par.pp}")
par.set_pp("123")
print(f"Parent: {par.pp}")
child = Child('XYZ')
print(f"Child-1: {child.pp} - {child.cc}")

原理解释

type(self)会获取当前实例所属的类(对于Config实例来说就是Config类),直接修改该类的pp属性后,所有继承自Config的子类实例、以及后续创建的Config实例,都会读取到更新后的类属性值,从而实现全局共享。

更简洁的写法(可选)

如果不想额外定义方法,也可以直接通过类名修改类属性:

# 替代 par.pp = "123"
Config.pp = "123"

这种方式同样能直接修改类属性,让所有实例共享更新后的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:47:42