77

以下は を生成し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)
4

2 に答える 2

117

まだ定義されていないクラスの文字列名を使用して、前方参照を使用できます。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 のデフォルトになります。

于 2015-11-21T15:06:56.340 に答える