簡體   English   中英

跨腳本共享類變量嗎?

[英]Are class variables shared across scripts?

我正在處理一組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版本和已安裝的軟件包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM