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 respostasAqui 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_foo
Eu 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?