Use a dictionary to hold instances of each subclass instead
class Singleton(object):
_instances = { }
def __new__(cls, *args, **kwargs):
if cls._instances.get( cls, None ) is None:
cls._instances[ cls ]_instances[cls] = super(Singleton, cls).__new__(cls, *args, **kwargs)
return Singleton._instances[ cls ]_instances[cls]