Heim  >  Artikel  >  Backend-Entwicklung  >  Wie löst man zirkuläre Abhängigkeiten in den Typhinweisen von Python auf?

Wie löst man zirkuläre Abhängigkeiten in den Typhinweisen von Python auf?

Susan Sarandon
Susan SarandonOriginal
2024-10-21 21:48:31537Durchsuche

How to Resolve Circular Dependencies in Python's Type Hints?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn