Созданный мной «минимальный» пример:
class C:
def wave(self):
print("C waves")
class A:
def __init__(self):
c = C()
setattr(self, 'wave', getattr(c, 'wave'))
class B(A):
def wave(self):
print("B waves")
>>> a = A()
>>> a.wave()
C waves # as expected
>>> b = B()
>>> b.wave()
C waves # why not 'B waves'?
>>>
В этом примере класс A
явно определил свой метод wave
как метод wave
класса C
, хотя и не через более общее определение функции, но используя вместо него setattr
. Затем у нас есть класс B
, который наследует A
, B
пытается переопределить метод wave
своим собственным методом, однако это невозможно, что происходит? как я могу это обойти?
Я хочу сохранить определение стиля setattr
класса A
, если это вообще возможно, посоветуйте, пожалуйста.
Я никогда не учил Python систематически, поэтому я думаю, что мне не хватает некоторое понимание того, как работают наследование Python и setattr
.