类变量是否跨脚本共享?



我正在开发一组具有许多共享后端功能的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的类变量在虚拟环境中的每个项目之间共享,那么为每个项目提供一个单独的虚拟环境是否会产生我真正想要的行为?

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


虚拟环境将仅共享 python 版本和已安装的软件包。

最新更新