def singleton(cls, *args, **kwargs): instances = {} def _singleton(): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return _singleton @singleton function() class Earth: def __new__(cls): if not hasattr(cls, 'instance'): cls.instance = super().__new__(cls) return cls.instance def __init__(self): self.name = 'earth' e = Earth() print(e, id(e)) a = Earth() print(a, id(a))