循環インポートを使用しない Python での型ヒント
大きなクラスを 2 つの小さなクラスに分割しようとすると、循環の問題が発生します。輸入品。 「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 constant は、「メイン」クラスを条件付きでインポートするために使用されます。コードを実行すると、定数が False であるため、インポート ステートメントはスキップされます。ただし、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 の type アノテーションは、後でインポートされるクラスの名前を表す文字列です。どちらのアプローチでも、タイプ ヒントを効果的に使用するには、Python 3.7 以降を使用する必要があります。
ミックスインとタイプ ヒントを使用するには、コード内で追加の構造化が必要になる場合があることに注意してください。たとえば、mypy では、「メイン」クラスと mixin クラスの両方が継承する抽象基本クラス (ABC) を作成することをお勧めします。これにより、型チェックの精度が向上します。
以上がPython で型ヒントの循環インポートを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。