Różnica między super (). Method () a super (self .__ klasa __, self) .method () [duplikat]

To pytanie ma już tutaj odpowiedź:

Czy podczas wywoływania super () w klasie pochodnej mogę przekazać siebie .__ class__? [duplikować] 2 odpowiedzi

Oto kod, który próbowałem napisać:

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

Klasa B i A to oczekiwane zachowanie, to znaczy kiedy dzwonięb.foo(), to dzwonia.foo() jak również zsuper(). Klasa C to próba naśladowania zachowania dziecka B i rodzica A, ale tym razem nie chcę tego wyraźnie określaćsuper().foo() w klasie potomnej, ale nadal chcę mieć rodzicafoo() być nazywanym. Działa zgodnie z oczekiwaniami.

Jednak nie do końca rozumiem, że podA.bind_foo, Muszę użyćsuper(self.__class__,self).foo() zamiastsuper().foo. super().foo daje

"SystemError: super(): no arguments". 

Czy ktoś może wyjaśnić, dlaczego tak jest?

questionAnswers(1)

yourAnswerToTheQuestion