3 """Define the :class:`Singleton` class.
5 >>> class A (Singleton):
7 ... print 'initializing instance of %s at (%s)' % (
8 ... self.__class__.__name__, id(self))
10 >>> A_instances = [A() for i in range(3)] # doctest: +ELLIPSIS
11 initializing instance of A at (...)
12 >>> for i in A_instances[1:]:
13 ... print id(i) == id(A_instances[0])
17 Singletons can also be subclassed.
21 >>> B_instances = [B() for i in range(3)] # doctest: +ELLIPSIS
22 initializing instance of B at (...)
23 >>> for i in B_instances[1:]:
24 ... print id(i) == id(B_instances[0])
27 >>> id(A_instances[0]) == id(B_instances[0])
31 class Singleton (object):
34 To create a singleton class, you subclass from Singleton; each
35 subclass will have a single instance, no matter how many times its
36 constructor is called. To further initialize the subclass
37 instance, subclasses should override 'init' instead of __init__ -
38 the __init__ method is called each time the constructor is called.
42 Original implementation from Guido van Rossum's
43 `Unifying types and classes in Python 2.2`_.
45 .. Unifying types and classes in Python 2.2:
46 http://www.python.org/download/releases/2.2.3/descrintro/#__new__
48 def __new__(cls, *args, **kwds):
49 it = cls.__dict__.get('__it__')
52 cls.__it__ = it = object.__new__(cls)
53 it.init(*args, **kwds)
56 def init(self, *args, **kwds):