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.
Dans ce code :
class A(object):
def __init__(self):
self.x = 'Hello'
def method_a(self, foo):
print self.x + ' ' + foo
... 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 classe A
et que vous appelez ses méthodes, elle sera automatiquement transmise, comme dans ...
a = A() # We do not pass any argument to the __init__ method
a.method_a('Sailor!') # We only pass a single argument
La méthode __init__
est en gros ce qui représente un constructeur en Python. Quand vous appelez A()
, 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ètre self
fait référence à l'instance de l'objet (comme this
en C++).
class Point:
def __init__(self, x, y):
self._x = x
self._y = y
La méthode __init__
est appelée lorsque la mémoire de l'objet est allouée :
x = Point(1,2)
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 :
class Point:
def __init__(self, x, y):
_x = x
_y = y
Vos paramètres x
et y
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 comme self._x
et self._y
, vous les définissez comme membres de l'objet Point
(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.