ホームページ  >  記事  >  バックエンド開発  >  Python の型ヒントで循環インポートを回避するにはどうすればよいですか?

Python の型ヒントで循環インポートを回避するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-23 13:34:02203ブラウズ

How to Avoid Cyclic Imports in Python's Type Hinting?

循環インポートを使用しない Python での型ヒント

問題:

大きなクラスを分割するとき複数のファイルにインポートすると、循環インポートによって型ヒントが適切に機能しなくなる可能性があります。具体的には、mixin クラスに「main」クラスをインポートすると、型チェックを妨げる循環依存関係が作成されます。

解決策:

Python 3.4 の場合:

次のコード構造を使用します:

<code class="python"># main.py

import mymixin.py

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

# mymixin.py

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: 'Main', xxx):  # Note the string type hint
        ...</code>

TYPE_CHECKING 定数により、main.py のインポートが型チェック中にのみ評価されるようになり、循環インポート エラーが回避されます。

Python 3.7 の場合:

Python 3.7 では、より洗練されたソリューションが導入されています:

<code class="python"># main.py

import mymixin.py

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

# mymixin.py

from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from main import Main

class MyMixin(object):
    def func2(self: Main, xxx):  # No need for a string type hint
        ...</code>

将来の インポート アノテーションのインポートにより、文字列型のヒントが有効になります

追加の考慮事項:

  • Mypy では、Main と MyMixin の両方で継承される抽象基本クラス (ABC) を作成する必要がある場合があります。適切な型チェック。
  • PyCharm のチェッカーも、互換性を最大限に高めるために同様のアプローチを必要とする場合があります。

以上がPython の型ヒントで循環インポートを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。