__init __ (self) -> None: vs __init __ (self): in Python [Duplikat]
Was ist der Unterschied zwischen 1) __init__(self) -> None:und 2) __init__(self):?
class A:
def __init__(self) -> None:
self.a = 5
class B:
def __init__(self):
self.a = 5
print (" A : ", A().a)
print (" B : ", B().a)
Antworten
Das -> NoneTeil ist ein Typhinweis. Es wurde im PEP 484. eingeführt Sie können mehr darüber lesen Sie hier . Beide von __init__Ihnen gezeigten Methoden sind in der Laufzeit gleichwertig. Typhinweise können von Typprüfern wie mypy oder Pyright verwendet werden .
Diese mypyDokumentation fasst es perfekt zusammen:
Da mypy ein statischer Analysator oder ein fusselartiges Werkzeug ist, sind die Typanmerkungen nur Hinweise für mypy und stören die Ausführung Ihres Programms nicht. Sie führen Ihr Programm mit einem Standard-Python-Interpreter aus, und die Anmerkungen werden effektiv als Kommentare behandelt.
Dies ist auch ein interessanter Teil des PEP 484, der die Gründe für die Einführung -> Noneder __init__Methode erläutert .
(Beachten Sie, dass der Rückgabetyp von init mit -> None kommentiert werden sollte. Der Grund dafür ist subtil. Wenn init eine Rückgabeanmerkung von -> None annimmt, würde dies bedeuten, dass eine argumentlose, nicht kommentierte init- Methode verwendet werden sollte Immer noch typgeprüft? Anstatt dies mehrdeutig zu lassen oder eine Ausnahme in die Ausnahme einzufügen, sagen wir einfach, dass init eine Rückgabeanmerkung haben sollte. Das Standardverhalten ist daher dasselbe wie bei anderen Methoden.