__init __ (self) -> None: vs __init __ (self): en python [duplicate]
Quelle est la différence entre 1) __init__(self) -> None:et 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)
Réponses
La -> Nonepartie est un indice de type. Il a été introduit dans PEP 484. Pour en savoir plus, cliquez ici . Les deux __init__méthodes que vous avez montrées sont équivalentes dans le runtime. Les indicateurs de type peuvent être utilisés par les vérificateurs de type, tels que mypy ou Pyright .
Cette mypydocumentation le résume parfaitement:
Comme mypy est un analyseur statique, ou un outil semblable à des peluches, les annotations de type ne sont que des indices pour mypy et n'interfèrent pas lors de l'exécution de votre programme. Vous exécutez votre programme avec un interpréteur Python standard et les annotations sont traitées efficacement comme des commentaires.
C'est également un élément intéressant de la PEP 484 qui explique la justification de la mise -> Noneen place de la __init__méthode.
(Notez que le type de retour de init doit être annoté avec -> None. La raison en est subtile. Si init supposait une annotation de retour de -> None, cela signifierait qu'une méthode init sans argument et non annotée devrait Plutôt que de laisser cela ambigu ou d'introduire une exception à l'exception, nous disons simplement que init devrait avoir une annotation de retour; le comportement par défaut est donc le même que pour les autres méthodes.)