Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich eine Methode mithilfe des einschließenden Klassentyps in Python eingeben?

Wie kann ich eine Methode mithilfe des einschließenden Klassentyps in Python eingeben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-18 02:26:09273Durchsuche

How Can I Type Hint a Method Using the Enclosing Class Type in Python?

Typhinweis einer Methode mit dem einschließenden Klassentyp

In Python ist es möglich, Hinweismethoden einzugeben, um die erwarteten Typen ihrer Argumente anzugeben und Rückgabewerte. Beim Umgang mit Methoden, die auf den umschließenden Klassentyp verweisen, kann es jedoch aufgrund der dynamischen Natur von Python zu Mehrdeutigkeiten kommen.

Das Problem mit Vorwärtsverweisen

Bedenken Sie die Folgender Codeausschnitt:

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)

Hier erwartet die __add__-Methode eine weitere Position-Instanz als Argument und gibt a zurück Instanz positionieren. Allerdings erlaubt Python keine Vorwärtsverweise in Typhinweisen, sodass die Verwendung des Klassennamens Position direkt in Annotationen zu einem Fehler führt.

Verwendung von „Self“ für Vorwärtsverweise (Python 3.11)

Mit der Einführung von PEP 673 in Python 3.11 ist der Self-Typ in der Typisierung verfügbar Modul. Die Verwendung von Self ermöglicht Vorwärtsverweise auf den umschließenden Klassentyp:

from typing import Self

class Position:

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

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

Using 'from future import annotations' (Python 3.7)

In Python 3.7 und höher ermöglicht die Anweisung from __future__ import annotations future die verschobene Auswertung von Anmerkungen. Dies bedeutet, dass Typanmerkungen als Zeichenfolgen gespeichert und später ausgewertet werden, wenn das Modul vollständig geladen ist:

from __future__ import annotations

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)

Verwenden von Zeichenfolgen für Vorwärtsreferenzen (Python-Versionen älter als 3.7)

Vor Python 3.7 war die Verwendung von Zeichenfolgen anstelle von Klassennamen der empfohlene Ansatz für die Weiterleitung Referenzen:

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)

Dies funktioniert, solange die Klassendefinition gefunden wird, bevor diese Typhinweise gefunden werden. Es ist jedoch wichtig zu beachten, dass die Verwendung von Zeichenfolgen für Typhinweise möglicherweise nicht von allen Code-Editoren oder Analysetools unterstützt wird.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Methode mithilfe des einschließenden Klassentyps in Python eingeben?. 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