Welcome, guest | Sign In | My Account | Store | Cart

While there are many alternate implementations of the Singleton pattern available, I decided to offer my own anyway.

Python, 12 lines
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Singleton(type):
    """Creates a unique instance of classes that use Singleton as
    their metaclass.
    """

    def __new__(cls, name, bases, d):
        def __init__(self, *args, **kw):
            raise TypeError("cannot create '%s' instances" %
                            self.__class__.__name__)
        instance = type(name, bases, d)()
        instance.__class__.__init__ = __init__
        return instance

Used as a metaclass, Singleton replaces a class with a unique class instance. Any subsequent calls to the class's constructor will result in an exception, as the constructor is overwritten immediately after the unique instance is created. I can't think of many instances where someone might accidentally call the constructor, but a Singleton made with this metaclass should behave similarly to the built-in None object. One problem introduced here is that inheritance is broken, but that is more of a problem of the Singleton pattern than of this recipe.

Created by Ian Bollinger on Tue, 3 Jan 2006 (PSF)
Python recipes (4591)
Ian Bollinger's recipes (2)

Required Modules

  • (none specified)

Other Information and Tasks