【发布时间】:2020-03-04 05:20:41
【问题描述】:
考虑以下 sn-p:
class A:
def __init__(self, a):
self._a = a
class B:
def __init__(self, b1, b2):
self._b1 = b1
self._b2 = b2
class C(B, A):
def __init__(self, b1, b2, a):
super().__init__(b1=b1, b2=b2, a=a)
然后会遇到如下错误:
TypeError: init() 得到了一个意外的关键字参数 'a'
为了解决这个问题,我初始化了超类“A”,如下:
class C(B, A):
def __init__(self, b1, b2, a):
super().__init__(b1=b1, b2=b2)
A.__init__(self, a=a)
另一个解决方案:
class C(B, A):
def __init__(self, b1, b2, a):
super().__init__(b1=b1, b2=b2)
super(B, self).__init__(a=a)
我通过试错的方式找到了这些解决方案。所以,我想知道将参数传递给多个超类的最优雅的方式是什么。
【问题讨论】:
-
@DeepSpace 我正在寻找这两种解决方案背后的逻辑。该帖子没有解释为什么没有将参数归因于相关的父类。
-
因为
super()只能引用单个类,并且该类是使用 mro(或方法解析顺序)计算的。对此进行研究。 -
@DeepSpace 实际上
__mro__背后的理念是能够以正确的顺序引用多个委托。所以,我不认为super()意味着引用单个类。
标签: python-3.x multiple-inheritance superclass