メソッドclsに渡される属性はクラス()への参照ですが、そのサブクラスをサブクラス化してインスタンス化した場合は、代わりにサブクラスへの参照になります。__new__Singletoncls == SingletonSingletoncls
superSingleton現在のクラス( )と、クラス階層内の次のクラスを計算するためにクラス階層がトラバースするサブクラス()の両方を知る必要がありますが、サブクラスがないclsため、これらは常に同じです。Singleton
渡す必要がある理由を詳しく説明するためにcls、これらのクラスすべてに、スーパーメソッドを呼び出して結果を返す単純なパススルー__new__メソッドがあると仮定します。
class A(object): pass
class B(object): pass
class C(A, B): pass
次に、をC.__new__呼び出しますsuper(C, cls).__new__。これは。と同等A.__new__です。ここで、ではなく、super(A, cls).__new__と同等になりたいと考えています。しかし、それを見つける唯一の方法は、開始がでではなく、であったと言われることです。B.__new__object.__new__superCA
あなたの場合、唯一のスーパークラスはobject、orig.__new__と同等であり、インスタンス化するクラスを認識できるようにobject.__new__渡されます。cls