Советы о том, как справиться с этой ситуацией, содержатся в супер-рассмотренном-супер-сообщении в блоге .
Один из способов - использовать только аргументы с ключевыми словами, отбрасывая их. вам нужно использовать **kwargs
, чтобы делегировать оставшиеся аргументы другим методам:
class A:
def m(self, *, x, y):
print(f'{type(self)=} {x=} {y=}')
class B(A):
def m(self, *, z, **kwargs):
super().m(**kwargs)
print(f'{type(self)=} {z=}')
Вызвать методы следующим образом:
>>> A().m(x=10, y=20)
type(self)=<class '__main__.A'> x=10 y=20
>>> B().m(x=10, y=20, z=30)
type(self)=<class '__main__.B'> x=10 y=20
type(self)=<class '__main__.B'> z=30