关于@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,它真的很混乱。你可以通过使用关键字参数来避免这种情况:
class A(object):
def __init__(self, *args, a, **kwargs):
print("A", a)
等等。
我可能有点烦人,但我注意到人们每次重写一个方法时都会忘记使用*args和**kwargs,而这是这些“神奇变量”为数不多的真正有用和理智的使用之一。