Das Borg Pattern

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'

Das Borg Pattern (last edited 2009-06-17 16:14:17 by localhost)