Utilité de "self" en python ?

Résolu/Fermé
Hr2944 Messages postés 720 Date d'inscription mardi 8 janvier 2019 Statut Membre Dernière intervention 22 janvier 2020 - Modifié le 6 avril 2019 à 13:27
Hr2944 Messages postés 720 Date d'inscription mardi 8 janvier 2019 Statut Membre Dernière intervention 22 janvier 2020 - 7 avril 2019 à 23:01
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.

1 réponse

quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
7 avril 2019 à 21:06
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.
1
Hr2944 Messages postés 720 Date d'inscription mardi 8 janvier 2019 Statut Membre Dernière intervention 22 janvier 2020 85
Modifié le 7 avril 2019 à 23:02
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
0