以下は を生成し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)
以下は を生成し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 のデフォルトになります。