it-swarm.com.de

Python "private" Funktionscodierungskonvention

Wenn ich ein python -Modul und Funktionen darin schreibe, habe ich einige "öffentliche" Funktionen, die für Außenstehende sichtbar sein sollen, aber einige andere "private" Funktionen, die nur sichtbar sein sollen und lokal und intern verwendet.

Ich verstehe in python gibt es keine absoluten privaten Funktionen. Aber was ist der beste, sauberste oder am häufigsten verwendete Stil, um "öffentliche" Funktionen und "private" Funktionen zu unterscheiden?

Ich liste einige der mir bekannten Stile auf:

  1. verwenden __all__ in der Moduldatei zur Angabe der "öffentlichen" Funktionen ( Wozu dient die Modulvariable python __all__? )
  2. verwenden Sie den Unterstrich am Anfang des Namens "privater" Funktionen

Gibt es eine andere Idee oder Konvention, die die Leute benutzen?

Vielen Dank!

57
Kaifei

Aus Pythons Klasse Moduldokumentation:

Private “Instanzvariablen, auf die nur innerhalb eines Objekts zugegriffen werden kann, sind in Python nicht vorhanden. Es gibt jedoch eine Konvention, die von den meisten Python Code: Ein Name mit vorangestelltem Unterstrich (z. B. _spam) sollte als nicht öffentlicher Teil der API behandelt werden (unabhängig davon, ob es sich um einen handelt) Funktion, eine Methode oder ein Datenelement) Es sollte als Implementierungsdetail betrachtet werden und kann ohne vorherige Ankündigung geändert werden.

Da es einen gültigen Anwendungsfall für klassenprivate Mitglieder gibt (nämlich Namenskollisionen von Namen mit Namen, die durch Unterklassen definiert sind, zu vermeiden), wird ein solcher Mechanismus, der als Name Mangling bezeichnet wird, nur eingeschränkt unterstützt. Jeder Bezeichner der Form __spam (mindestens zwei führende Unterstriche, höchstens ein nachfolgender Unterstrich) wird textuell durch _klassenname__spam ersetzt, wobei klassenname der aktuelle Klassenname ist, bei dem der führende Unterstrich entfernt ist. Diese Zerlegung erfolgt unabhängig von der syntaktischen Position des Bezeichners, solange dieser innerhalb der Definition einer Klasse vorkommt.

87
Eric Hydrick