web-dev-qa-db-fra.com

Python Convention de codage de fonction "privée"

Lors de l'écriture d'un module python et des fonctions qu'il contient, j'ai quelques fonctions "publiques" qui sont censées être exposées à des étrangers, mais d'autres fonctions "privées" qui ne sont censées être vues et utilisé localement et en interne.

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

Je liste certains des styles que je connais:

  1. utilisation __all__ dans le fichier de module pour indiquer ses fonctions "publiques" ( Quelle est la variable de niveau de module python __all__ pour? )
  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!

57
Kaifei

De la documentation du module Class de Python:

Les variables d'instance privées qui ne sont accessibles qu'à l'intérieur d'un objet n'existent pas en Python. Cependant, il existe une convention qui est suivie par la plupart des Python: un nom préfixé par un trait de soulignement (par exemple _spam) doit être traité comme une partie non publique de l'API (que ce soit un fonction, une méthode ou un membre de données. Il doit être considéré comme un détail d'implémentation et sujet à changement sans préavis.

Puisqu'il existe un cas d'utilisation valide pour les membres privés de classe (à savoir pour éviter les conflits de noms avec des noms définis par des sous-classes), il existe un support limité pour un tel mécanisme, appelé gestion de noms. Tout identifiant de la forme __spam (au moins deux traits de soulignement de tête, au plus un trait de soulignement de fin) est textuellement remplacé par _classname__spam, où classname est le nom de classe actuel avec le ou les traits de soulignement de tête supprimés. Cette manipulation est effectuée sans tenir compte de la position syntaxique de l'identifiant, tant qu'elle se produit dans la définition d'une classe.

87
Eric Hydrick