1. ホーム
  2. python

タイプヒント:循環依存性の解決 [重複]。

2023-11-03 19:14:08

質問

以下は NameError: name 'Client' is not defined . どうすれば解決できるでしょうか?

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


class Client():
    def __init__(self, server: Server):
        server.register_client(self)

どのように解決するのですか?

あなたは 前方参照 を使うことで 文字列 の名前を、まだ定義されていない Client クラスの名前です。

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

Python 3.7時点 を延期することもできます。 すべて を追加することで、アノテーションの実行時パージングを延期することができます。 __future__ を追加してください。

from __future__ import annotations

この時点で、アノテーションは式の抽象構文木の文字列表現として保存されます。 typing.get_type_hints() を使って解決することができます(そして、上記で使用したように前方参照を解決します)。

参照 PEP 563 -- アノテーションの評価の延期 この挙動は Python 4.0 のデフォルトとなります。