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
Barbara StreisandOriginal
2024-12-18 00:35:11324Durchsuche

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)

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:

  • 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!

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