Skip to main content
 首页 » 编程设计

python之类变量是否跨脚本共享

2025年05月04日14softidea

我正在处理一组具有大量共享后端功能的 Python 项目。为避免代码重复,我已将此共享功能放入模块中。

其中一个模块是事件系统。我希望事件系统在单个项目中是全局的,因此我定义了一个包含类级变量和方法的 EventDispatcher 类:

event_name = str 
event_data = Any 
listener_callback = Callable[[event_name, event_data], None] 
 
class EventDispatcher: 
    # event name, List<event_callback> 
    _listeners: Dict[event_name, Set[listener_callback]] = {} 
 
    @classmethod 
    def register_listener(cls, event: event_name, listener: listener_callback) -> None: 
        # get the existing list of listeners for this event and append the new listener to it 
        listener_callbacks: Set[listener_callback] = cls._listeners.get(event, set()) 
        listener_callbacks.add(listener) 
 
        # put the listener list back in the map 
        cls._listeners[event] = listener_callbacks 
 
    #other listener methods follow 

因为一切都是类级别的,所以我应该能够在我项目的任何类中调用 EventDispatcher.register_listener,并且所有已注册的监听器都应该添加到同一个列表中。

我关心的是其他项目。由于共享功能的数量,我在同一个虚拟环境中运行所有项目。这会导致 EventDispatcher 和 co.在虚拟环境中的所有代码之间共享,这样在一个项目中注册的事件可以从另一个项目中触发,或者每个项目都会得到自己的副本?

作为后续问题,如果共享虚拟环境确实导致EventDispatcher 的类变量在虚拟环境中的每个项目之间共享,将为每个项目提供一个单独的虚拟环境产生我真正想要的行为?

请您参考如下方法:

没有。只要您的程序在不同的文件中并且您没有导入包含 EventDispatcher 类的文件,它就不会以任何方式共享。


虚拟环境只会共享 python 版本和已安装的包。