A diferença entre super (). Method () versus super (self .__ class __, self) .method () [duplicate]

Esta questão já tem uma resposta aqui:

Ao chamar super () em uma classe derivada, posso passar em self .__ class__? [duplicado] 2 respostas

Aqui está o código que eu estava tentando escrever:

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()

A classe B e A é o comportamento esperado, isto é, quando eu chamob.foo(), chamaa.foo() bem comsuper(). A classe C é a tentativa de imitar o comportamento da criança B e do pai A, mas desta vez eu não quero colocar explicitamentesuper().foo() na classe infantil, mas eu ainda quero que o paifoo() ser chamado. Funciona como esperado.

No entanto, o que eu não entendo é que, sobA.bind_fooEu tenho que usarsuper(self.__class__,self).foo() ao invés desuper().foo. super().foo dá um

"SystemError: super(): no arguments". 

Alguém pode explicar por que isso é assim?

questionAnswers(1)

yourAnswerToTheQuestion