class Singleton:
instance = None
def __new__(cls):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance
singleton_obj1 = Singleton()
singleton_obj2 = Singleton()
print(singleton_obj1)
print(singleton_obj2)
输出
<__main__.Singleton object at 0x10dbc0f60>
<__main__.Singleton object at 0x10dbc0f60>
有人可以解释一下在这一行cls.instance = super().__new__(cls)
发生了什么。哪些代码行帮助创建了这个类Singleton
?
__new__
不同于__init__
。实际上,对于这个实现来说,__new__
才是正确的魔法方法,因为如果已经存在一个实例,单例就不需要被初始化。这里有一篇博客解释了它们之间的区别:http://howto.lintel.in/python-__new__-magic-method-explained/ - VoNWooDSoN