Typhinweise: Zirkuläre Abhängigkeit auflösen
In Python können zirkuläre Abhängigkeiten entstehen, wenn zwei Klassen in ihren Typhinweisen aufeinander verweisen. Dies führt zu einem NameError, wenn versucht wird, eine der Klassen zu instanziieren.
Betrachten Sie das folgende Beispiel:
<code class="python">class Server: def register_client(self, client: Client) pass class Client: def __init__(self, server: Server): server.register_client(self)</code>
Der Versuch, Client zu instanziieren, schlägt mit einem NameError fehl: Der Name „Client“ ist nicht vorhanden definiert.
Vorwärtsverweise verwenden
Eine Möglichkeit, diese zirkuläre Abhängigkeit aufzulösen, besteht darin, einen Vorwärtsverweis im Typhinweis zu verwenden. Dies erfolgt durch die Angabe eines String-Namens für die Klasse, der noch nicht definiert wurde:
<code class="python">class Server: def register_client(self, client: 'Client') pass</code>
Annotation-Parsing verschieben
Eine weitere in Python 3.7 eingeführte Lösung ist: Verschieben Sie die Laufzeitanalyse von Anmerkungen vollständig. Dies wird durch das Hinzufügen des folgenden Imports am oberen Rand des Moduls erreicht:
<code class="python">from __future__ import annotations</code>
Wenn die Analyse der Anmerkungen verschoben wird, werden die Anmerkungen als Zeichenfolgendarstellungen des abstrakten Syntaxbaums (AST) für den Ausdruck gespeichert. Sie können typing.get_type_hints() verwenden, um diese Anmerkungen aufzulösen und Vorwärtsverweise aufzulösen, wie im vorherigen Beispiel verwendet.
Weitere Einzelheiten finden Sie in PEP 563: Postponed Evaluation of Annotations.
Das obige ist der detaillierte Inhalt vonWie löst man zirkuläre Abhängigkeiten in den Typhinweisen von Python auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!