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中文網其他相關文章!