Parameterübergabe typangabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lfg
User
Beiträge: 2
Registriert: Mittwoch 11. Oktober 2023, 12:27

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
Benutzeravatar
__blackjack__
User
Beiträge: 14000
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Darum geht's ja nicht, sondern um den speziellen Typen Self. Welchen Sinn das ganze hat, da sind wir ja eh einer Meinung.
Benutzeravatar
__blackjack__
User
Beiträge: 14000
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Antworten