沒有循環導入的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 類別都繼承自該抽象基底類別。這可以提高類型檢查的準確性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3