トップアンサーの最も支持されたコメントによると、 newがクラスインスタンスを返す場合、 initは複数回呼び出されます。
だから私はこれをチェックしました:
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
print 'Singleton.__new__ called with class', cls
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
class Cache(Singleton):
def __init__(self, size=100):
print 'I am called with size', size
class S(Singleton):
def __init__(self, param):
print 'I am S with param', param
c = Cache(20)
s = S(10)
結果:
Singleton.__new__ called with class <class '__main__.Cache'>
I am called with size 20
Singleton.__new__ called with class <class '__main__.S'>
I am S with param 10
どうやらinitは、Singleton から継承するクラスで複数回呼び出されることはありません。それまでの間、これを処理する Python で smth が変更されましたか (2008 年に質問が行われたことを考慮して)、またはここで smth が欠落していますか?