Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich Typhinweise für eingeschlossene Klassen in Python richtig verarbeiten?

Wie kann ich Typhinweise für eingeschlossene Klassen in Python richtig verarbeiten?

Barbara Streisand
Freigeben: 2024-12-18 00:35:11
Original
320 Leute haben es durchsucht

How Can I Properly Handle Type Hints for Enclosed Classes in Python?

Umgang mit Typhinweisen für eingeschlossene Klassen in Python

Verstehen des Problems

Beim Definieren einer Methode, die sich auf das Einschließen bezieht class als Rückgabetyp verwenden, kann es zu einem ungelösten Referenzfehler kommen. Betrachten wir den folgenden Code in Python 3:

class Position:

    def __init__(self, x: int, y: int):
        self.x = x
        self.y = y

    def __add__(self, other: Position) -> Position:
        return Position(self.x + other.x, self.y + other.y)
Nach dem Login kopieren

Dieser Code schlägt mit einem NameError fehl, weil die Positionsklasse nicht im Bereich der __add__-Methode definiert ist.

Auflösen des Problem

Python 3.11 mit „Selbst“ Typ:

In Python 3.11 und späteren Versionen können Sie den Typ „Self“ verwenden, um in Typhinweisen auf die einschließende Klasse zu verweisen:

from typing import Self

class Position:

    def __add__(self, other: Self) -> Self:
        return Position(self.x + other.x, self.y + other.y)
Nach dem Login kopieren

Python 3.7 mit „__future__“ Anmerkungen importieren':

Wenn Sie Python 3.7 oder verwenden In neueren Versionen können Sie die verzögerte Auswertung von Anmerkungen aktivieren, indem Sie die folgende Importanweisung hinzufügen:

from __future__ import annotations
Nach dem Login kopieren

Wenn diese Option aktiviert ist, werden die Typhinweise als Zeichenfolgen gespeichert, bis das Modul vollständig geladen ist, wodurch das Referenzproblem behoben wird:

class Position:

    def __add__(self, other: Position) -> Position:
        return Position(self.x + other.x, self.y + other.y)
Nach dem Login kopieren

Python <3.7:

Für Python-Versionen unten 3.7 können Sie mit einfachen Anführungszeichen einen String-Verweis auf die einschließende Klasse angeben:

class Position:

    def __add__(self, other: 'Position') -> 'Position':
        return Position(self.x + other.x, self.y + other.y)

Dadurch wird ein Vorwärtsverweis erstellt, der aufgelöst wird, sobald die Klasse definiert ist.

Zusätzlich Hinweise:

  • Wenn Sie Dummy-Definitionen oder Monkey-Patching zum Hinzufügen von Anmerkungen verwenden, stellen Sie sicher, dass die Anmerkungen spiegeln genau den Typ der Klasse wider.
  • In Python 3.10 war die verschobene Auswertung von Anmerkungen als Standard geplant, sie wurde jedoch inzwischen auf eine zukünftige Version verschoben.

Das obige ist der detaillierte Inhalt vonWie kann ich Typhinweise für eingeschlossene Klassen in Python richtig verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage