これが私が書こうとしていたコードです:
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".
誰かがなぜそうなのか説明できますか?