gpt4 book ai didi

python - python单例类可以继承吗?

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:19 26 4
gpt4 key购买 nike

我的想法是任何一个对象都应该存在于单例类的所有子类中。我一直在尝试的代码和结果矩阵如下所示。在子类的情况下,矩阵似乎工作正常。我走错路了吗?它是否得到了父类对象和子类对象的情况?

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

最佳答案

所有子类的 __new__() 方法都没有明确的 return 语句,因此它们都返回 None。这就是为什么他们的新实例都是一样的。使用此代码,它们也将与 Singleton() 相同:

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

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

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

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

甚至不需要为子类定义__new__():

class A(Singleton):
pass

class B(Singleton):
pass

class C(B):
pass

关于python - python单例类可以继承吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8237390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com