Python-singleton - / Objekt-Instanziierung

Ich Lerne Python und ich habe versucht, zu implementieren eines Singleton-Typ-Klasse als test. Den code habe ich wie folgt:

_Singleton__instance = None

class Singleton:
    def __init__(self):
        global __instance
        if __instance == None:           
            self.name = "The one"
            __instance = self
        else:
            self = __instance

Dies funktioniert teilweise, aber das selbst = __ - Instanz Teil scheint zu scheitern. Ich habe eine Ausgabe von dem Interpret zu demonstrieren (der code oben ist gespeichert in singleton.py):

>>> import singleton
>>> x = singleton.Singleton()
>>> x.name
'The one'
>>> singleton._Singleton__instance.name
'The one'
>>> y = singleton.Singleton()
>>> y.name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Singleton instance has no attribute 'name'
>>> type(y)
<type 'instance'>
>>> dir(y)
['__doc__', '__init__', '__module__']

Ist es möglich, das zu tun, was ich versuche? Wenn nicht gibt es einen anderen Weg, dies zu tun?

Alle Vorschläge willkommen.

Cheers.

Anderen als eine interessante übung lernen, haben Sie einen Anwendungsfall für diese Singleton? Manchmal Singletons sein kann, viel einfacher als diese. Das Singleton-Entwurfsmuster -- Umfang -- ist ein Smalltalk/C++/Java-ism, die nicht oft gebraucht werden, in Python.

InformationsquelleAutor JonahSan | 2009-09-01

Schreibe einen Kommentar