」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何解決Python中類型提示的循環導入?

如何解決Python中類型提示的循環導入?

發佈於2024-11-17
瀏覽:109

How to Resolve Cyclic Imports for Type Hinting in Python?

沒有循環導入的Python 中的類型提示

在嘗試將一個大類分成兩個較小的類時,您會遇到循環問題進口。 “main”類別導入 mixin 類,並且 mixin 類別在其類型提示中引用“main”類別。這會導致導入循環,導致類型提示無法正常運作。

要解決此問題,可以考慮以下方法:

# main.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from mixin import MyMixin

class Main(object):
    def func1(self, xxx: Any):
        ...
# mixin.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: Main, xxx: Any):
        ...

在此範例中,Python 的 TYPE_CHECKING 常數用於有條件地導入「main」類別。執行程式碼時,由於常數為 False,因此跳過 import 語句。然而,像 mypy 這樣的類型檢查工具會解釋 if TYPE_CHECKING 區塊中的程式碼並識別 func2 的類型註解。

另一種方法涉及使用前向引用:

# mixin.py
from __future__ import annotations
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self, xxx: 'Main'):
        ...

這裡,func2的類型註解是一個字串,表示稍後將導入的類別的名稱。這兩種方法都需要使用 Python 3.7 或更高版本才能有效地使用類型提示。

請記住,使用 mixins 和類型提示可能需要在程式碼中進行額外的結構化。例如,mypy 建議建立一個抽象基底類別 (ABC),您的「主」類別和 mixin 類別都繼承自該抽象基底類別。這可以提高類型檢查的準確性。

版本聲明 本文轉載於:1729656617如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3