Heim >Backend-Entwicklung >Python-Tutorial >Wie tippe ich eine Methode mit dem einschließenden Klassentyp in Python ein?

Wie tippe ich eine Methode mit dem einschließenden Klassentyp in Python ein?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 19:04:10934Durchsuche

How to Type Hint a Method with the Enclosing Class Type in Python?

Wie kann ich eine Methode mit dem Typ der einschließenden Klasse angeben?

Typhinweise werden in Python zur Angabe verwendet der erwartete Typ einer Variablen oder der Rückgabewert einer Funktion. Sie bieten eine Möglichkeit, das beabsichtigte Verhalten des Codes zu dokumentieren und können dabei helfen, Fehler frühzeitig zu erkennen.

Problemstellung:

Sie haben 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)

Ihr Editor (PyCharm) meldet jedoch einen Fehler, der darauf hinweist, dass der Verweis auf Position im Typhinweis von __add__ nicht aufgelöst werden kann. Dies wirft die Frage auf: Wie können Sie angeben, dass der Rückgabetyp vom Typ Position sein soll?

Lösung:

In Python gibt es drei Hauptansätze für Typhinweise eine Methode mit dem Typ ihrer umschließenden Klasse, abhängig von der von Ihnen verwendeten Python-Version:

Python 3.11 :

from typing import Self

class Position:
    def __add__(self, other: Self) -> Self:
        ...

Python 3.7 mit from __future__ Importanmerkungen:

from __future__ import annotations

class Position:
    def __add__(self, other: Position) -> Position:
        ...

Python 3.6 und Früher:

class Position:
    def __add__(self, other: 'Position') -> 'Position':
        ...

Erklärung:

  • Python 3.11: Führt eine neue Typanmerkung ein, Self, die speziell entwickelt wurde zur Angabe der Umschließungsart Klasse.
  • Python 3.7 mit from __future__ Importanmerkungen: Ermöglicht die verschobene Auswertung von Typanmerkungen und speichert sie als Zeichenfolgen, bis das Modul vollständig geladen ist.
  • Python 3.6 und früher: Verwendet eine Zeichenfolgendarstellung des Klassennamens im Typ Hinweis.

Anforderung vor der Kompilierung:

In Python-Versionen vor 3.7 erfordert die Verwendung von Zeichenfolgen in Typhinweisen, dass die referenzierte Klasse definiert ist vor seiner Verwendung in der Typanmerkung. Andernfalls wird ein NameError angezeigt.

Überlegungen:

  • Die Verwendung von Self wird in Python 3.11 bevorzugt, da es eine explizitere und lesbarere Möglichkeit zur Referenzierung bietet einschließender Typ.
  • In Python 3.7 und höher, aus __future__ import Anmerkungen können die Leistung von Code, der das Typisierungsmodul importiert, erheblich verbessern.
  • In Python-Versionen vor 3.6 ist der stringbasierte Ansatz die einzige Option für Typhinweise auf die umschließende Klasse.

Denken Sie daran, dass Typhinweise optional sind, aber sie können die Lesbarkeit des Codes, die Fehlerprüfung und die Wartbarkeit erheblich verbessern.

Das obige ist der detaillierte Inhalt vonWie tippe ich eine Methode mit dem einschließenden Klassentyp in Python ein?. 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