La diferencia entre super (). Method () versus super (self .__ class __, self) .method () [duplicate]

Esta pregunta ya tiene una respuesta aquí:

Al llamar a super () en una clase derivada, ¿puedo pasar auto .__ class__? [duplicar] 2 respuestas

Aquí está el código que estaba tratando de escribir:

class A(object):
    def bind_foo(self):
        old_foo = self.foo
        def new_foo():
            old_foo()
            #super().foo()
            super(self.__class__,self).foo()

        self.foo = new_foo

    def __init__(self):
        print("A __init__")          

    def foo(self):
        print("A foo")

class B(A):
    def __init__(self):
        print("B __init__")
        super().__init__()

    def foo(self):
        print("B foo")
        super().foo()

class C(A):
    def __init__(self):
        print("C __init__")
        super().__init__()
        super().bind_foo()

    def foo(self):
        print("C foo")    

b  = B()
b.foo()

c = C()
c.foo()

Clase B y A es el comportamiento esperado, es decir, cuando llamob.foo()llamaa.foo() tambien consuper(). La clase C es el intento de imitar el comportamiento del niño B y del padre A, pero esta vez no quiero poner explícitamentesuper().foo() en la clase infantil pero todavía quiero al padrefoo() ser llamado. Funciona como se esperaba.

Sin embargo, lo que no entiendo es que, bajoA.bind_foo, Tengo que usarsuper(self.__class__,self).foo() más bien quesuper().foo. super().foo da un

"SystemError: super(): no arguments". 

¿Alguien puede explicar por qué eso es así?

Respuestas a la pregunta(1)

Su respuesta a la pregunta