python中的Singleton实现之间的区别

时间:2019-11-22 04:49:04

标签: python-3.x python-2.7 singleton

作为我的自我学习者,我总是尝试使用不同的方法来实现某些目标,并通过比较它们之间的差异来学习。 最近,我研究了单例实现,但无法弄清两种实现之间的区别。

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'>

这使我想到以下问题:

  1. 除了self之外,cls没有可见的差异。那么哪个 实施正确吗?
  2. 如果两种实现都令人满意 输出并作为单例,我们可以使用的条件是什么 是否/每个实现?

0 个答案:

没有答案
相关问题