Making Daniel Brodie's singleton recipe work with keyword arguments

/ Published in: Python
Save to your folder(s)

The ASPN cookbook has many recipes for singletons in Python. So far, this one
has been my favourite, because it is so simple and concise. However, I just ran into a brick wall when I tried to use it with a class that can be initialized with keyword arguments. This is my first draft for a solution to this problem. It's quick and dirty; please give it a glance and leave a comment if you find a problem.

Copy this code and paste it in your HTML
  1. class Singleton(type):
  2. def __init__(self, *args, **kwds):
  3. type.__init__(self, *args, **kwds)
  4. self._instances = {}
  6. def __call__(self, *args, **kwds):
  7. sig = args + tuple(sorted(kwds.items()))
  8. if not sig in self._instances:
  9. self._instances[sig] = type.__call__(self, *args, **kwds)
  10. return self._instances[sig]

Report this snippet


RSS Icon Subscribe to comments

You need to login to post a comment.