python单例类可以被继承吗?

use*_*147 5 python inheritance singleton

我的想法是任何一个对象都应该存在于 Singleton 类的所有子类中。我一直在尝试的代码和结果矩阵如下所示。在子类的情况下,矩阵似乎工作得很好。我是不是走错路了?它是否了解父类对象和子类对象的情况会发生什么?

class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(
                                cls, *args, **kwargs)
        return cls._instance

class A(Singleton):
    def __new__(cls, *args, **kwargs):
        super(A, cls).__new__(cls, *args, **kwargs)

class B(Singleton):
    def __new__(cls, *args, **kwargs):
        super(B, cls).__new__(cls, *args, **kwargs)

class C(B):
    def __new__(cls, *args, **kwargs):
        super(B, cls).__new__(cls, *args, **kwargs)


if __name__ == '__main__':
    s1=Singleton()
    s2=Singleton()
    if(id(s1)==id(s2)):
        print "Same"
    else:
        print "Different"

'''
I got a result matrix for s1 and s2
           |************ s2 **************************|           
s1         |Singleton() |A()      | B()     | C()     |
===========|==========================================|
Singleton()|Same        |Different|Different|Different|
A()        |Different   |Same     |Same     |Same     |
B()        |Different   |Same     |Same     |Same     |
C()        |Different   |Same     |Same     |Same     |
'''
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 3

代码看起来不错,但为类及其子类选择一个共享的单例值是没有意义的。子类的全部要点是在某种程度上不同于父类和兄弟子类。对我来说,每个类没有自己独特的单例实例似乎很奇怪。