Seite 1 von 1

Parameterübergabe typangabe

Verfasst: Mittwoch 11. Oktober 2023, 12:32
von lfg
Mir ist bewusst das das angeben des typen bei übergabeparametern nicht relevant für die funktion ist, dennoch gehört es zu einer guten doku dazu. Wie gibt man also den typ als die eigene klasse an?

Hier ein kurzes codebeispiel zum selber ausprobieren:

Code: Alles auswählen

class Vector:
    def __init__(self, x, y, z) -> None:
        self.x = x
        self.y = y
        self.z = z
    
    def distance(self, other:Vector) -> float:
        return ((self.x - other.x)**2 + (self.y - other.y)**2 + (self.z - other.z)**2)**0.5

if __name__ == '__main__':
    vec1 = Vector(0, 1, 0)
    vec2 = Vector(1, 0, 0)

    print(vec1.distance(vec2))
Fehler ausgabe:
class Vector:
File "c:\test.py", line 7, in Vector
def distance(self, other:Vector) -> float:
NameError: name 'Vector' is not defined

Re: Parameterübergabe typangabe

Verfasst: Mittwoch 11. Oktober 2023, 13:16
von __deets__

Re: Parameterübergabe typangabe

Verfasst: Mittwoch 11. Oktober 2023, 14:40
von __blackjack__
Iiih, die Beispiele sind streckenweise ein bisschen unpythonisch. Methoden die ein Objekt ändern, geben normalerweise in Python nicht das veränderte Objekt zurück. Die eingebauten Datentypen und die aus der Standardbibliothek machen das *bewusst* nicht, dann sollte man bei einem selbstgebauten `Stack` nicht damit anfangen.

Re: Parameterübergabe typangabe

Verfasst: Mittwoch 11. Oktober 2023, 14:48
von __deets__
Darum geht's ja nicht, sondern um den speziellen Typen Self. Welchen Sinn das ganze hat, da sind wir ja eh einer Meinung.

Re: Parameterübergabe typangabe

Verfasst: Mittwoch 11. Oktober 2023, 14:55
von __blackjack__
Naja es sind ja auch Beispiele auf der Seite die nicht „fluid API“ sind.

Ich persönlich würde momentan noch den `__future__`-Import `Self` vorziehen, weil der ohne Installation von einen zusätzlichen Modul bei allen offiziell unterstützten CPython-Versionen funktioniert.