["python","python-typing"]
Type hints: solve circular dependency

The following produces NameError: name 'Client' is not defined. How can I solve it? class Server: def register_client(self, client: Client) pass class Client: def __init__(self, server: Server): server.register_client(self)
You can use a forward reference by using a string name for the not-yet-defined Client class: class Server: def register_client(self, client: 'Client') pass As of Python 3.7, you can also postpone all runtime parsing of annotations by adding the following __future__ import at the top of your module: from __future__ import annotations at which point the annotations are stored as string representations of the abstract syntax tree for the expression; you can use typing.get_type_hints() to resolve those (and resolve forward references as used above). See PEP 563 -- Postponed Evaluation of Annotations for details.