Das Singleton-Pattern ist auch in Python durchführbar. Allerdings bietet sich hierfür auch das Borg-Pattern an.
Im Grunde genommen kann man eine Instanz einer Borg Klasse erstellen. Anschließend teilen sich alle Borg Klassen die selben Attribute.
1 class Borg(object):
2 _shared = {}
3 def __new__(cls,*args,**kwargs):
4 inst = object.__new__(cls)
5 inst.__dict__ = cls._shared
6 return inst
Um eine eigene Klasse zu erstellen, für die jede Instanz den selben Inhalt hat, leitet man einfach von der Borg-Klasse ab:
1 class MeinBorg(Borg):
2 # Falls die Klasse einen eigenen geteilten Zustand haben soll, und ihn sich
3 # nicht mit allen Subklassen von Borg teilen soll, hier _shared definieren.
4 _shared = {}
5 def __init__(self,*args,**kwargs):
6 # Irgendwas mit den Argumenten tun.
7 pass
Answendungsbeispiel:
1 >>> b1 = Borg()
2 >>> b1.panic = 42
3 >>> b1.spam = "eggs"
4 >>> b2 = Borg()
5 >>> b2.spam
6 'eggs'