110 votes

Convention de codage des fonctions "privées" en Python

Lorsque j'écris un module python et les fonctions qu'il contient, j'ai des fonctions "publiques" qui sont censées être exposées aux personnes extérieures, mais d'autres fonctions "privées" qui ne sont censées être vues et utilisées que localement et en interne.

Je comprends qu'en Python, il n'y a pas de fonctions privées absolues. Mais quel est le meilleur style, le plus soigné, ou le plus utilisé pour distinguer les fonctions "publiques" des fonctions "privées" ?

J'énumère certains des styles que je connais :

  1. utiliser __all__ dans le fichier du module pour indiquer ses fonctions "publiques" ( À quoi sert la variable de niveau de module python __all__ ? )
  2. utiliser le trait de soulignement au début du nom des fonctions "privées".

Y a-t-il une autre idée ou convention que les gens utilisent ?

Merci beaucoup !

143voto

Eric Hydrick Points 3133

De Python Classe la documentation du module :

Les variables d'instance "privées", auxquelles on ne peut accéder que depuis l'intérieur d'un objet, n'existent pas en Python. Cependant, il existe une convention qui est suivie par la plupart du code Python : un nom préfixé par un trait de soulignement (par exemple _spam) doit être traité comme une partie non publique de l'API (qu'il s'agisse d'une fonction, d'une méthode ou d'un membre de données). Il doit être considéré comme un détail d'implémentation et peut être modifié sans préavis.

Puisqu'il existe un cas d'utilisation valide pour les membres privés de classe (à savoir éviter les conflits de noms avec les noms définis par les sous-classes), il existe un support limité pour un tel mécanisme, appelé maniement de noms. Tout identifiant de la forme __spam (au moins deux traits de soulignement en tête, au plus un trait de soulignement en queue) est remplacé textuellement par _classname__spam, où classname est le nom de la classe courante, sans le(s) trait(s) de soulignement en tête. Ce traitement est effectué sans tenir compte de la position syntaxique de l'identificateur, pour autant qu'il se trouve dans la définition d'une classe.

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