Forum Programmation.python Ivre, il meurt noyé sous une avalanche de self

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
4
11
déc.
2020

Coucou les foromouleurs

Ça fait un peu plus d'un an que je me remet à Python après une absence de quasi 20 ans, ça avance bien, je commence à faire des trucs sympa.

Mais je me rend compte que plus de 80% de mes lignes de code commencent par self.blabla, notamment dès qu'il s'agit d'écrire du GUI (PyQt5), qui réclame de créer beaucoup de variables.

Outre le fait que je trouve ça dégueu, je me demande si j'ai bien tout compris à comment on manipule les variables d'instance.

C'est pareil chez vous ?

  • # ça me semble pas anormal

    Posté par  . Évalué à 3.

    Euh bah moi ça ne me semble pas anormal, les variables d'instance c'est bien self. Après t'es pas obligé d'utiliser self, tu peux le raccourcir en s si ça te chante, mais ça fait pas de miracles (et pas sûr que la PEP 8 soit d'accord).
    Après t'as peut-être des exemples précis dans lesquels c'est particulièrement dégueu ?

  • # N'utilise des objets que si tu as besoin d'état

    Posté par  . Évalué à 3. Dernière modification le 11/12/20 à 16:06.

    Je n'ai jamais fait de gros gros projet en python, mais j'utilise ce langage depuis un bon moment pour toute sorte de script.

    Je dirais qu'il faut utiliser des fonctions uniques au maximum (sans variable globale hein) et n'utiliser des objets que si tu as besoin d'un état.

    En codant comme ça tu n'aurais moins de self et ton code sera plus compréhensible.

  • # Selfish language!

    Posté par  . Évalué à 2.

    Désolé …

    Mais je plussois, ça me gonfle !

    Plein de gens vont trouver ça normal. C'est normal aussi vu que c'est le langage qui l'impose.
    Mais y'avait mieux à faire : j'écris les méthodes d'une classe, mon code est "géographiquement" dans cette classe, et pourtant, à chaque occurrence, faut lui dire que c'est l'attribut que je veux manipuler … Pfffff …

    Y aurait-il une raison, une bonne, pour expliquer ce choix ?

    (j'avoue, je n'en fait pas tout les jours. Mais ça me pend au nez alors ça me stresse un peu …)

    • [^] # Re: Selfish language!

      Posté par  . Évalué à 3.

      Python à pris la décision d'être très explicite la dessus.

      Perso, faisant du python quotidiennement, ça me dérange pas, je dirait même qu'au contraire le "self"
      de Python (plus exactement la logique sous-jacente qui fait que monobjet.function() équivaut MaClasse.function(monobjet) ) permet de faire facilement des choses qui serait moins trivial voir impossible dans d'autres langages, du style un héritage multiple fin, de la composition.

      Pour les méthodes, ça me semble franchement pas un soucis.
      Là ou par-contre je suis d'accord que ça peut être pénible c'est quand on à beaucoup d'attribut, mais les dataclasses propose une solution: https://docs.python.org/fr/3/library/dataclasses.html

    • [^] # Re: Selfish language!

      Posté par  (site Web personnel) . Évalué à 7. Dernière modification le 11/12/20 à 21:32.

      Y aurait-il une raison, une bonne, pour expliquer ce choix ?

      Oui, le fait que les variables sont créées dynamiquement dans les espaces de nom.

      def methode(self, x):
          y = 4 * x + z

      Dans ce cas, y et est un attribut de l'objet ou bien une variable locale ?

      Et z est-il une variable locale, un attribut de l'objet ou de la classe, une variable globale ?

      Je t'accorde qu'une expression où identificateur commençant par . serait mappé sur le premier paramètre de la méthode permettrait de se passer du self dans les expressions. C'est plus court mais moins lisible (ça commence à faire ruby :-)

      def methode(self, x):
          .y = 4 * x + z

      Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.