Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Typhinweise für eingeschlossene Klassen in Python richtig verarbeiten?
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)
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)
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
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)
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:
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!