Der Unterschied zwischen super (). Method () und super (self .__ class __, self). Method () [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Kann ich beim Aufruf von super () in einer abgeleiteten Klasse self .__ class__ übergeben? [Duplikat] 2 Antworten

Hier ist der Code, den ich zu schreiben versuchte:

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

Klasse B und A ist das erwartete Verhalten, das heißt, wenn ich anrufeb.foo(), es rufta.foo() auch mitsuper(). Klasse C ist der Versuch, das Verhalten von Kind B und Eltern A nachzuahmen, aber dieses Mal möchte ich es nicht explizit ausdrückensuper().foo() in der kinderklasse will ich aber trotzdem die elternfoo() heißen. Es funktioniert wie erwartet.

Was ich jedoch nicht ganz verstehe, ist das unterA.bind_foo, Ich muss benutzensuper(self.__class__,self).foo() eher, alssuper().foo. super().foo gibt ein

"SystemError: super(): no arguments". 

Kann mir jemand erklären warum das so ist?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage