Menu

Utilité de "self" en python ? [Résolu]

Messages postés
658
Date d'inscription
mardi 8 janvier 2019
Statut
Membre
Dernière intervention
22 avril 2019
-
Bonjours,

J'apprends actuellement le python et je me demandai pourquoi lors d'une définition de méthode dans une classe il fallait toujours utiliser self.mavariable = valeur ?
Pourquoi n'y a t'il pas ça en java (que je connais aussi) ?

Ps : je sais que self est une convention.
Afficher la suite 

Votre réponse

1 réponse

Messages postés
271
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
20 avril 2019
86
0
Merci
Bonjour,
La philosophie de Python est différente de Java et les classes fonctionnent donc différement.
Toutes les méthodes sont en fait l'équivalent des méthodes static en java, c'est à dire qu'elle ne sont pas liés à une instance de classe mais à la classe elle même. La conséquence est qu'il faut toujours donné en paramètre, l'objet que l'on veut modifier. Heuresement, nous n'avons pas besoins de faire ça nous même car Python le fait à notre le place.
monObjet = MaClasse()
monObjet.maMethode()

est équivalent à
monObjet = MaClasse()
MaClasse.maMethode(monObjet)

Vous pouvez d'ailleurs utiliser la deuxième syntaxe et le résultat sera le même.
Il faut donc ensuite récupérer l'objet en question dans la méthode, et c'est pour cela que toutes les méthodes commencent par un paramètre self.

Maintenant, pourquoi les créateurs de Python ont fait ce choix ?
Et bien, c'est une question de lisibilité. En java, quand on écrit
maVariable = valeur;

on ne sait pas si maVariable est un attribut de la classe ou une variable local de la méthode. Cela peut parfois porter à confusion et une utilisation explicite de self permet d'éviter des problèmes.

Je vous avoue que j'ai moi même eu du mal avec ce fameux self quand j'ai commencé à utiliser des classes en Python, mais j'ai fini par prendre l'habitude et maintenant j'ai même tendance à utiliser this en Java quand ce n'est pas nécessaire.
Hr2944
Messages postés
658
Date d'inscription
mardi 8 janvier 2019
Statut
Membre
Dernière intervention
22 avril 2019
21 -
Merci beaucoup pour cette explication très claire ! Je comprends mieux maintenant :)
Il va le falloir du temps pour m'y habituer mais au moins je saurai ce que je fais.
Bonne soirée
Commenter la réponse de quent217