483 votes

Python : Pourquoi certaines fonctions ont trait de soulignement « __ » avant et après le nom de la fonction ?

Cela semble se produire beaucoup et je me demandais si c’était une exigence dans les langages Python, ou simplement une question de convention.

En outre, quelqu'un pourrait nommer et expliquer quelles fonctions ont tendance à avoir les traits de soulignement et pourquoi ( `` , par exemple) ?

644voto

Michael Burr Points 181287

À partir du Python PEP 8 -- Guide de Style pour le Code Python (http://www.python.org/dev/peps/pep-0008/):

les formulaires à l'aide de la tête ou à la fuite des traits de soulignement sont reconnu (ceux-ci peuvent généralement être combiné avec tous les cas de la convention):

  • _single_leading_underscore: la faiblesse de la "usage interne" de l'indicateur. E. g. "à partir de M import *" ne pas importer des objets dont le nom commence par un le trait de soulignement.

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

    Tkinter.Toplevel(master, class_='ClassName')

  • __double_conduisant un trait de soulignement_: lorsque vous nommez un attribut de classe, invoque le nom de déformation (à l'intérieur de la classe FooBar, __boo devient _FooBar__boo; voir ci-dessous).

  • __double_menant_et_de fuite trait de soulignement___: "magie" des objets ou des attributs qui vivent dans contrôlées par l'utilisateur des espaces de noms. E. g. __init__, __import__ ou __file__. Ne jamais inventer ces noms; les utiliser uniquement comme indiqué.

Notez que les noms avec double attaque et de fuite des traits de soulignement sont essentiellement réservés à Python lui-même: "ne Jamais inventer ces noms; seulement les utiliser comme documenté".

66voto

Raymond Hettinger Points 50330

Les autres répondants sont corrects dans la description de la double attaque et de fuite des traits de soulignement comme une convention de nommage pour les "spéciaux" ou de méthodes "magiques".

Alors que vous pouvez appeler directement ces méthodes ([10, 20].__len__() par exemple), la présence de traits de soulignement est un indice que ces méthodes sont destinées à être invoquée indirectement (len([10, 20]) par exemple). La plupart python opérateurs sont associés à une "magie" de la méthode (par exemple, a[x] est la manière habituelle de l'invocation d' a.__getitem__(x)).

24voto

Les noms entourés de double trait de soulignement sont « spéciaux » à Python. Elles apparaissent dans la Référence du langage Python, section 3, « Modèle de données ».

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