Bonsoir Tout'l monde,
Je voulais savoir :
- L'importance du constructeur __init__ dans une classe
- quelle est la signification du mot clef SELF dans le constructeur et son role.
Merci
Bonsoir Tout'l monde,
Je voulais savoir :
- L'importance du constructeur __init__ dans une classe
- quelle est la signification du mot clef SELF dans le constructeur et son role.
Merci
Salut,
__init__() n'est pas le constructeur d'une classe, celui-ci est __new__().
self désigne l'instance elle même de la classe qui existe aussi dans d'autres langages mais il fut choisit par le créateur de Python que cette instance serait explicite et non implicite comme ailleurs, d'où sa présence à chaque fois que l'instance apparaît.
Dans la construction
foo et self désignent la même chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Foo: def __init__(self): self.baz = "Un attribut" foo = Foo()
Salut,
__init__, si elle existe, sera une des méthodes/fonctions appelées(*) lors de l'instanciation d'une classe.
(*) une classe peut hériter d'autres classes et meta-class.
"self" n'est pas un mot clé, mais une convention.
On peut remplacer self par ce qu'on veut:
mais on s'appliquera à utiliser "self", par convention.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 >>> class B: ... count = 0 ... def print(s): ... s.count += 1 ... print(s.count) ... >>> a = B() >>> a.print() 1 >>> a.print() 2 >>>
note: Python étant dynamique, la création d'une instance peut se limiter à la création d'un "dict" qui sera "initialisé" par Python mais qui peut être "rempli" à n'importe quel moment (et dans n'importe quelle "méthode"). Mais çà n'arrange pas la lisibilité et la documentation du code. "Par convention", on s'attache à créer les variables d'instance dans __init__ ou mieux elles sont définies comme attributs de classe avec des valeurs par défaut (et des commentaires). Le code plus lisible. Mais techniquement, il fonctionnera pareil... mais on s'y applique dans l'espoir de s'y retrouver plus facilement au cas où on relira le code plus tard.
"a.print" est (presque) un sucre syntaxique.
On pourrait écrire:
et obtenir le même "effet".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 >>> B.print(a) 3 >>> B.print(a) 4 >>>
- W
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager