Python で循環依存関係を解決するには?

Patricia Arquette
リリース: 2024-10-21 21:49:03
オリジナル
880 人が閲覧しました

How to Resolve Circular Dependencies in Python?

タイプのヒント: Python での循環依存関係の解決

Python では、複数のクラスが相互に参照するときに循環依存関係が発生する可能性があります。これにより、名前が未定義であるために実行時エラーが発生する可能性があります。次のコードを考えてみましょう:

class Server:
    def register_client(self, client: Client):
        pass


class Client:
    def __init__(self, server: Server):
        server.register_client(self)
ログイン後にコピー

ここでは、サーバーはクライアントに依存し、その逆も同様です。 Python がこのコードを実行しようとすると、NameError が発生します。名前 'Client' が定義されていません。

この問題を解決するには、前方参照を使用することが 1 つの解決策です。 Python 3.6 以前では、これは、まだ定義されていないクラスの文字列名を使用することで実現できます:

class Server:
    def register_client(self, client: 'Client'):
        pass
ログイン後にコピー

これにより、Client が後で定義されるクラスであることが型チェッカーに通知されます。

Python 3.7 以降では、別のアプローチとして、モジュールの先頭で __future__.annotations インポートを使用します。

from __future__ import annotations

class Server:
    def register_client(self, client: Client):
        pass
ログイン後にコピー

これにより、アノテーションのランタイム解析が延期され、アノテーションを解析できるようになります。文字列表現として保存されます。このコンテキストでも前方参照を使用できます。

これらの手法を採用することで、循環依存関係を解決し、コードがエラーなく実行されるようにすることができます。

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

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