首頁  >  文章  >  後端開發  >  如何解決Python中類型提示的循環導入?

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

Linda Hamilton
Linda Hamilton原創
2024-10-23 12:27:01393瀏覽

How to Resolve Cyclic Imports for Type Hinting in Python?

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

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

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

<code class="python"># 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):
        ...</code>
<code class="python"># 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):
        ...</code>

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

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

<code class="python"># 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'):
        ...</code>

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

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

以上是如何解決Python中類型提示的循環導入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn