这是我试图编写的代码:
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".
有人可以解释为什么会这样吗?