Utilisateur anonyme
Détails
Que font __init__ et self en Python ?
J’apprends le langage de programmation Python et je suis tombé sur quelque chose que je ne comprends pas bien.
Dans une méthode comme :
def method(self, blah):
def __init__(?):
....
....
Que fait self
? Que doit-il être ? Est-il obligatoire ?
Que fait la méthode __init__
? Pourquoi est-elle nécessaire ? (etc.)
Je pense que ce sont des constructions OOP, mais je n'en sais pas beaucoup.
731
3
Dans ce code :
... la variable
self
représente l'instance de l'objet lui-même. La plupart des langages orientés objet la transmettent comme un paramètre caché aux méthodes définies sur un objet ; Python ne le fait pas. Vous devez la déclarer explicitement. Lorsque vous créez une instance de la classeA
et que vous appelez ses méthodes, elle sera automatiquement transmise, comme dans ...La méthode
__init__
est en gros ce qui représente un constructeur en Python. Quand vous appelezA()
, Python crée un objet pour vous, et le passe comme premier paramètre à la méthode__init__
. Tout paramètre supplémentaire (par exemple,A(24, 'Hello')
) sera également passé comme argument - dans ce cas, une exception sera levée, puisque le constructeur ne les attend pas.Oui, vous avez raison, ce sont des constructions oop.
__init__
est le constructeur d'une classe. Le paramètreself
fait référence à l'instance de l'objet (commethis
en C++).La méthode
__init__
est appelée lorsque la mémoire de l'objet est allouée :Il est important d'utiliser le paramètre
self
à l'intérieur de la méthode d'un objet si vous voulez que la valeur persiste avec l'objet. Si, par exemple, vous implémentez la méthode__init__
comme ceci :Vos paramètres
x
ety
seront stockés dans des variables sur la pile et seront supprimés lorsque la méthode init sortira de sa portée. En définissant ces variables commeself._x
etself._y
, vous les définissez comme membres de l'objetPoint
(accessibles pendant toute la durée de vie de l'objet).__init__
agit comme un constructeur. Vous devrez passer "self" à toutes les fonctions de classe comme premier argument si vous voulez qu'elles se comportent comme des méthodes non-statiques. Les "self" sont des variables d'instance de votre classe.