Ни один из методов __new__()
подклассов не имеет явного оператора return
, поэтому все они возвращают None
.Вот почему их новые экземпляры все одинаковы.С этим кодом они будут такими же, как 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):
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