Innerhalb der Klasse erhält der Bezeichner __Singleton
mangled. Am Ende haben Sie Probleme, weil Namensverfälschung nur innerhalb von Klassen (nicht außerhalb) auftritt. Also __Singleton
als Klassenname bedeutet etwas anderes als __Singleton
, wenn Sie in einer Klasse Suite sind.
Jede Kennung des Formulars __spam
(zumindest zwei führenden Unterstrichen, höchstens einen nacheilenden Unterstrich) ist textlich mit _classname__spam
ersetzt, wobei der aktuellen Klasse Klassenname ist der Name mit Unterstrich (en) gestrippt. Dieses Mangeln erfolgt ohne Berücksichtigung der syntaktischen Position des Bezeichners, solange es innerhalb der Definition einer Klasse auftritt.
Beachten Sie, dass der Hauptgrund für Mangeln ist, weil es
... hilfreich ist für die Vermietung Subklassen Methoden außer Kraft setzen, ohne Intramethodenaufrufe zu brechen.
auch:
... Namenskonflikte von Namen mit den Namen von Unterklassen definiert zu vermeiden
Als solche gibt es wirklich keinen Grund, eine Klasse mit führenden haben doppelte Unterstriche im Namen (es gibt keine Möglichkeit von intraclass Methodenaufrufen, die Konflikte mit Klassennamen haben). Ein einzelner Unterstrich ist ein gut genug Signal für die Nutzer, dass sie nicht diese Klasse verwenden sollten:
... einen Namen mit einem Unterstrich (zB _spam
) Präfix sollte als nicht-öffentlichen Teil der behandelt werden API (ob es eine Funktion, eine Methode oder ein Datenelement ist). Es sollte als Implementierungsdetail betrachtet werden und kann ohne vorherige Ankündigung geändert werden.
ich es nicht raten würde, aber wenn Sie wirklich es arbeiten wollen, können Sie wahrscheinlich globals
verwenden, um die Klasse zu nachschlagen:
class __Foo(object):
def __init__(self):
super(globals()['__Foo'], self).__init__()
f = __Foo()
print f
Sie möchten verhindern, dass '__Singleton' außerhalb dessen verwendet wird? –
Außerhalb meines Moduls. Nur "MySingleton" sollte für jeden zugänglich sein, der dies nutzen möchte. –
Führende doppelte Unterstriche sind kein universeller Datenschutzmarker. Sie machen die Dinge nicht privater als einzelne Unterstriche. – user2357112