554 Stimmen

Gibt es eine einfache, elegante Möglichkeit, Singletons zu definieren?

Es scheint viele Möglichkeiten der Definition zu geben Einzelnes in Python. Gibt es eine einheitliche Meinung auf Stack Overflow?

0voto

mkm Punkte 1405

In Fällen, in denen Sie die oben beschriebene metaklassenbasierte Lösung nicht wollen und Ihnen der einfache funktionsdekoratorbasierte Ansatz nicht gefällt (z.B. weil in diesem Fall statische Methoden auf der Singleton-Klasse nicht funktionieren), funktioniert dieser Kompromiss:

class singleton(object):
  """Singleton decorator."""

  def __init__(self, cls):
      self.__dict__['cls'] = cls

  instances = {}

  def __call__(self):
      if self.cls not in self.instances:
          self.instances[self.cls] = self.cls()
      return self.instances[self.cls]

  def __getattr__(self, attr):
      return getattr(self.__dict__['cls'], attr)

  def __setattr__(self, attr, value):
      return setattr(self.__dict__['cls'], attr, value)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X