First page Back Continue Last page Overview Graphics

Singeltons with metaclasses

class Singleton(type):

_instances = {}

def __call__(cls, *args, **kwargs):

if cls not in cls._instances:

cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)

return cls._instances[cls]

class SingletonClass(metaclass=Singleton):

pass

class RegularClass():

pass

x = SingletonClass()

y = SingletonClass()

print(x == y)

x = RegularClass()

y = RegularClass()

print(x == y)

True

False