39 votes

Différence entre "__method__" et "method".

Quelle est la différence entre __method__ , method y _method__ ?

Est-ce qu'il y en a ou pour une raison quelconque les gens ont pensé que __doc__ devrait être juste comme ça au lieu de doc . Qu'est-ce qui rend une méthode plus spéciale qu'une autre ?

76voto

Ayman Hourieh Points 39435

Du guide de style :

  • _single_leading_underscore : faible indicateur d'"usage interne". Par exemple from M import * n'importe pas les objets dont le nom commence par un trait de soulignement.

  • single_trailing_underscore_ : utilisé par convention pour éviter les conflits avec mot-clé Python, par ex.

    Tkinter.Toplevel(master, class_='ClassName')
  • __double_leading_underscore lors de l'attribution d'un nom à un attribut de classe, on invoque le nom (dans la classe FooBar , __boo devient _FooBar__boo (voir ci-dessous).

  • __double_leading_and_trailing_underscore__ : objets "magiques" ou attributs qui vivent dans des espaces de noms contrôlés par l'utilisateur. Par exemple __init__ , __import__ o __file__ . N'inventez jamais de tels noms ; utilisez-les uniquement comme documentés.

22voto

DasIch Points 1595
  • method est juste une méthode normale
  • _method ne doit pas être appelée si vous ne savez pas ce que vous faites, ce qui signifie normalement que vous avez écrit la méthode vous-même.
  • __method les deux traits de soulignement sont utilisés pour éviter les manipulations de noms. Les attributs ou les méthodes de ce type sont accessibles par l'intermédiaire de instance._ClassName__method . Bien que beaucoup de gens appellent cela "privé", c'est pas . Vous ne devez jamais utiliser cette méthode pour empêcher quelqu'un d'accéder à cette méthode. _method à la place.
  • __method__ est utilisé pour les méthodes spéciales qui modifient le comportement de l'instance. Ne nommez pas vos propres méthodes de cette façon.

4voto

mavnn Points 3359

Il s'agit de conventions, elles ne sont donc pas appliquées de quelque manière que ce soit. Néanmoins, vous pouvez normalement vous attendre à ce que :

__somename__

Quelque chose de défini dans les spécifications du langage python lui-même. Ne l'utilisez pas dans votre propre dénomination.

_somename

Cette fonction est normalement censée être appelée via un autre mécanisme plutôt que directement. C'est similaire à la déclaration de quelque chose de privé dans la plupart des autres langages, mais ce n'est pas appliqué de quelque manière que ce soit.

__somename

C'est realmente n'est pas censé être appelé directement, et est maltraité en interne pour éviter que vous le fassiez accidentellement. Si vous avez vraiment besoin de l'appeler pour une raison quelconque, consultez la documentation pour savoir comment faire.

Tout ce qui précède peut s'appliquer également aux noms de fonctions, de variables ou de classes.

1voto

Andrew Hare Points 159332

Ces méthodes ont été nommées ainsi pour réduire la possibilité de collisions de noms.

0voto

Yes - that Jake. Points 9184

Les méthodes préfacées et préfixées par le double soulignement sont généralement marquées de la sorte pour indiquer qu'elles font partie de la spécification du langage Python.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X