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

如何在Python中跨所有导入实例动态更新模块变量?

符合Python风格的动态模块变量实现方案

方案1:直接通过模块访问变量(最简洁)

这是Python中管理模块动态变量的标准方式,所有导入的模块别名都会指向同一个模块对象,修改模块属性后,所有引用都会同步更新。

模块代码(foo/__init__.py)

foo = 'some'

def update_foo(val):
    global foo
    foo = val

使用示例

import foo
import foo as f

print(foo.foo)  # 输出 'some'
print(f.foo)    # 输出 'some'

foo.update_foo('other')

print(foo.foo)  # 输出 'other'
print(f.foo)    # 输出 'other'

方案2:用可变对象封装(支持直接引用变量名)

如果希望无需模块前缀,直接通过foo变量名访问并同步更新,可以用自定义可变对象封装值。利用Python的对象引用特性,导入的变量指向同一个实例,修改实例内部值时所有引用都会同步。

模块代码(foo/__init__.py)

class _MutableStr:
    def __init__(self, initial_value):
        self.value = initial_value
    
    def __str__(self):
        return self.value
    
    def __repr__(self):
        return repr(self.value)

foo = _MutableStr('some')

def update_foo(val):
    foo.value = val

使用示例

from foo import foo, update_foo

print(foo)  # 输出 'some'
update_foo('other')
print(foo)  # 输出 'other'

原理说明

  • 方案1中,模块本身是一个对象,foo是模块的属性。无论用什么别名导入模块,都会指向同一个模块对象,修改属性后所有访问都会获取最新值。
  • 方案2中,foo是一个自定义实例,导入的是该实例的引用。修改实例的value属性不会改变引用本身,因此所有导入该实例的地方都会同步看到更新,且直接打印实例就能显示当前值。

内容的提问来源于stack exchange,提问作者Mohamedneyaz Basheer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:40:21