# 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 Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): cls._instances.setdefault(cls, super().__call__(*args, **kwargs)) return cls._instances[cls] # Python2 class MyClass(BaseClass): __metaclass__ = Singleton pass # Python3 class MyClass(BaseClass, metaclass=Singleton): pass # Test for x in range(5): MyClass().x = x print(MyClass().x)