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

Linda Hamilton
リリース: 2024-10-23 13:34:02
オリジナル
202 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!