gpt4 book ai didi

python - 类变量是否跨脚本共享?

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:06 24 4
gpt4 key购买 nike

我正在处理一组具有大量共享后端功能的 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 版本和已安装的包。

关于python - 类变量是否跨脚本共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57128528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com