ホームページ  >  記事  >  バックエンド開発  >  Python の型ヒントの循環依存関係を解決するには?

Python の型ヒントの循環依存関係を解決するには?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-21 21:48:31537ブラウズ

How to Resolve Circular Dependencies in Python's Type Hints?

型ヒント: 循環依存関係の解決

Python では、2 つのクラスが型ヒントで相互参照するときに循環依存関係が発生することがあります。これにより、クラスの 1 つをインスタンス化しようとすると、NameError が発生します。

次の例を考えてみましょう:

<code class="python">class Server:
    def register_client(self, client: Client)
        pass


class Client:
    def __init__(self, server: Server):
        server.register_client(self)</code>

クライアントをインスタンス化しようとすると、NameError で失敗します: name 'Client' is not

前方参照の使用

この循環依存関係を解決する 1 つの方法は、型ヒントで前方参照を使用することです。これは、まだ定義されていないクラスの文字列名を指定することによって行われます。

<code class="python">class Server:
    def register_client(self, client: 'Client')
        pass</code>

アノテーション解析の延期

Python 3.7 で導入されたもう 1 つの解決策は、次のとおりです。注釈の実行時解析を完全に延期します。これは、モジュールの先頭に次のインポートを追加することで実現されます:

<code class="python">from __future__ import annotations</code>

注釈の解析が延期されると、注釈は式の抽象構文ツリー (AST) の文字列表現として保存されます。 testing.get_type_hints() を使用すると、これらのアノテーションを解決し、前の例で使用したように前方参照を解決できます。

詳細については、PEP 563: アノテーションの延期された評価を参照してください。

以上がPython の型ヒントの循環依存関係を解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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