class Singleton(type): def __init__(self, *args, **kwargs): self.__instance = None super().__init__(*args, **kwargs) # 继承type的所有属性 def __call__(self, *args, **kwargs): if self.__instance is None: self.__instance = super().__call__(*args, **kwargs) # 调用type的__call__方法 返回值为第一次创建的Spam对象 return self.__instance else: return self.__instance# Exampleclass Spam(metaclass=Singleton): def __init__(self): print('Creating Spam')""">>> a = Spam()Creating Spam>>> b = Spam()>>> a is b
不用元类的写法
class _Spam: def __init__(self): print('Creating Spam')_spam_instance = Nonedef Spam(): global _spam_instance if _spam_instance is not None: return _spam_instance else: _spam_instance = _Spam() return _spam_instance