Разница между super (). Method () и super (self .__ class __, self) .method () [duplicate]
На этот вопрос уже есть ответ здесь:
При вызове super () в производном классе я могу передать себя .__ class__? [Дубликат] 2 ответаВот код, который я пытался написать:
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()
Класс B и A - ожидаемое поведение, то есть когда я звонюb.foo()
это вызываетa.foo()
также сsuper()
, Класс C - это попытка подражать поведению дочернего B и родительского A, но на этот раз я не хочу указывать явноsuper().foo()
в дочернем классе, но я все еще хочу родителяfoo()
быть вызванным. Работает как положено.
Тем не менее, я не совсем понимаю, что подA.bind_foo
Я должен использоватьsuper(self.__class__,self).foo()
скорее, чемsuper().foo
. super().foo
дает
"SystemError: super(): no arguments".
Может кто-нибудь объяснить, почему это так?