__init __ (self) -> None: vs __init __ (self): in python [duplicate]
Jaka jest różnica między 1) __init__(self) -> None:a 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)
Odpowiedzi
-> NoneCzęść stanowi wskazówkę typu. Został wprowadzony w PEP 484. Możesz przeczytać o tym więcej tutaj . Obie __init__metody, które pokazałeś, są równoważne w środowisku wykonawczym. Podpowiedzi do typów mogą być używane przez narzędzia do sprawdzania typów, takie jak mypy lub Pyright .
Ta mypydokumentacja podsumowuje to doskonale:
Ponieważ mypy jest statycznym analizatorem lub narzędziem podobnym do kłaczków, adnotacje typu są tylko wskazówkami dla mypy i nie przeszkadzają podczas uruchamiania programu. Uruchamiasz program za pomocą standardowego interpretera języka Python, a adnotacje są skutecznie traktowane jako komentarze.
Jest to również interesujący fragment PEP 484, który wyjaśnia uzasadnienie wprowadzenia -> Nonetej __init__metody.
(Zwróć uwagę, że zwracany typ init powinien być opatrzony adnotacją -> Brak. Przyczyna tego jest subtelna. Jeśli init założyłby adnotację zwrotną -> Brak, oznaczałoby to, że metoda init bez argumentów i bez adnotacji powinna nadal być sprawdzanym typem? Zamiast pozostawiać to niejednoznaczne lub wprowadzać wyjątek od wyjątku, po prostu mówimy, że init powinien mieć adnotację powrotu; domyślne zachowanie jest więc takie samo, jak w przypadku innych metod).