如何使用不可變和可變類別處理 Python 中的循環導入?
避免在具有不可變和可變類的Python 中進行循環導入
循環導入通常被認為是糟糕的代碼設計的症狀。然而,在某些情況下,類別之間的循環依賴可能是必要的。為了避免在這種情況下出現導入錯誤,必須仔細管理導入語句和循環引用的位置。
範例場景
考慮兩個類,A 和 B,其中 A 具有可變屬性(列表),B 具有不可變屬性(元組)。每個類別都需要一個方法,該方法會取得另一個類別的實例並傳回自身的實例,從而相應地轉換屬性。
解
有幾種方法可以避免這種情況下的循環導入:
絕對導入:
在a.py和b.py中,使用絕對導入來確保模組可以直接相互導入:
# a.py from package import b # b.py from package import a
延遲導入:
延遲導入其他類,直到函數中實際需要它:
# a.py def convert_to_list(b_obj): from package import b return a.A(list(b_obj.immutable_attr)) # b.py def convert_to_tuple(a_obj): from package import a return b.B(tuple(a_obj.mutable_attr))
中級模組:
建立一個導入a 和b 的中間模組。然後a和b都可以導入該模組,以避免循環導入:
# package/common.py import a import b
在a.py和b.py中,導入中間模組:
# a.py from package import common # b.py from package import common
避免類別定義中的循環引用:
應避免類別定義中的循環引用。相反,請考慮建立一個工廠函數,該函數將類別的屬性作為參數並傳回對應類別的實例:
# a.py def create_a(list_attr): return A(list(list_attr)) # b.py def create_b(tuple_attr): return B(tuple(tuple_attr))
以上是如何使用不可變和可變類別處理 Python 中的循環導入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

Python3.6環境下加載pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

使用Scapy爬蟲時管道文件無法寫入的原因探討在學習和使用Scapy爬蟲進行數據持久化存儲時,可能會遇到管道文�...
