簡體   English   中英

如何處理 object 實例之間或模塊之間的通信?

[英]How do I handle communication between object instances, or between modules?

我似乎遺漏了一些基本的 Python 概念,它是如此簡單以至於沒有人談論它。 對於可能使用不正確的描述,我提前道歉——我可能沒有足夠的知識來正確地提出這個問題。

這是我到達的概念死胡同:

我有一個 Class Net 的實例,它處理通過 Internet 與某些事物進行通信。 我有一個 Class 進程的實例,它執行一堆處理和數據管理我有一個 Class Gui 的實例,它處理 GUI。

Gui 實例需要訪問 Net 和 Process 實例,因為來自其小部件的回調會調用這些方法等。 Net 和 Process 實例需要訪問一些 Gui 實例的方法,因為它們需要偶爾顯示一些東西(它在做什么,查詢結果等)

我該如何管理它,以便這些東西相互交流? Inheritance 不起作用 - 我需要實例,而不是 class。 此外,inheritance 是一種方式,而不是兩種方式。 我顯然可以實例化 Gui,然后在實例化時將其(作為對象)傳遞給其他人。 但是 Gui 將不知道 Process 和 Net 實例。 我當然可以在創建后手動將 Net 和 Process 實例傳遞給 Gui 實例,但這似乎是一種 hack,而不是正確的做法。 此外,隨着所涉及的對象數量的增加,我必須手動傳遞的相互依賴的數量增長得相當快(幾乎是階乘?) - 所以我認為這不是正確的策略。

在用正常功能嘗試了同樣的事情之后,我到達了這個死胡同,在那里我更舒服。 由於它們的大小,類似分組的函數存在於單獨的模塊中,同樣是 Net、Gui 和 Process。 問題完全一樣。 “父”模塊導入“子”模塊,然后可以調用它們的方法。 但是子模塊如何調用父模塊的方法,又如何調用彼此的方法呢? 讓一切都導入一切似乎充滿了危險,並且隨着更多對象的參與似乎再次爆發。

那么我在組織我遇到這個問題的代碼時缺少什么,顯然所有其他 python 用戶都沒有?

答案非常簡單。

任何需要對其他模塊全局可用的東西都可以存儲在它自己的模塊中,例如 global_param。 每個其他模塊都可以導入 global_param,然后根據需要使用和修改其內容。 這也避免了循環導入的任何問題。 不知道為什么我花了這么長時間才弄清楚...

暫無
暫無

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

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