О комментарии @ calfzhou , вы можете использовать, как обычно, **kwargs
:
class A(object):
def __init__(self, a, *args, **kwargs):
print("A", a)
class B(A):
def __init__(self, b, *args, **kwargs):
super(B, self).__init__(*args, **kwargs)
print("B", b)
class A1(A):
def __init__(self, a1, *args, **kwargs):
super(A1, self).__init__(*args, **kwargs)
print("A1", a1)
class B1(A1, B):
def __init__(self, b1, *args, **kwargs):
super(B1, self).__init__(*args, **kwargs)
print("B1", b1)
B1(a1=6, b1=5, b="hello", a=None)
Результат:
A None
B hello
A1 6
B1 5
Вы также можете использовать их позиционно:
B1(5, 6, b="hello", a=None)
, но вы должны помнить MRO, это действительно запутанно.
Я могу быть немного раздражающим, но я заметил, что люди каждый раз забыли использовать *args
и **kwargs
, когда они переопределяют метод, в то время как это одно из немногих действительно полезных и разумных способов использования этих «магических переменных».