作为我的自我学习者,我总是尝试使用不同的方法来实现某些目标,并通过比较它们之间的差异来学习。 最近,我研究了单例实现,但无法弄清两种实现之间的区别。
class UserSingleton1(object):
_instance = None
test_type = ""
num = 2
def __new__(self):
if not self._instance:
self._instance = super(UserSingleton1, self).__new__(self)
return self._instance
和
class UserSingleton2(object):
_instance = None
test_type = ""
num = 2
def __new__(cls):
if not cls._instance:
cls._instance = super(UserSingleton2, cls).__new__(cls)
return cls._instance
我在这里看到的唯一区别是, UserSingleton1类迫使我创建和使用其对象,而UserSingleton2类则没有。
为了进一步测试,我使用了以下代码行:
UserSingleton1 = UserSingleton1()
UserSingleton1.test_type = "abc"
UserSingleton1.num = 2
print (repr(UserSingleton1.test_type))
print (repr(UserSingleton1))
print (repr(UserSingleton1))
print (repr(UserSingleton1))
print("======================================")
#UserSingleton2 = UserSingleton2()
UserSingleton2.test_type = "asd"
print (repr(UserSingleton2.test_type))
print (repr(UserSingleton2))
print (repr(UserSingleton2))
print (repr(UserSingleton2))
这给了我下面的输出:
'abc'
<__main__.UserSingleton1 object at 0x000002BAC988E548>
<__main__.UserSingleton1 object at 0x000002BAC988E548>
<__main__.UserSingleton1 object at 0x000002BAC988E548>
======================================
'asd'
<class '__main__.UserSingleton2'>
<class '__main__.UserSingleton2'>
<class '__main__.UserSingleton2'>
这使我想到以下问题: