And*_*eas -2 python inheritance multiple-inheritance
我有两个类,它们的方法初始化了相同的参数__init__。我想继承“X”类中的两个类。但我会得到:TypeError: B.__init__() missing 1 required positional argument: 'my_param'
可重现的示例:
class A:
def __init__(self, my_param):
super().__init__()
self.my_param = my_param
class B:
def __init__(self, my_param):
super().__init__()
self.my_param = my_param * 2
class X(A, B):
def __init__(self, my_param):
super().__init__(my_param=my_param)
a = X(my_param=1)
print(a.my_param)
Run Code Online (Sandbox Code Playgroud)
A 和 B 是 Mixins,它们为子类提供附加功能。它们可以单独或一起使用。假设 A 类提供按 ID 搜索的 searchhc 功能,而 B 类提供按值搜索的功能。
有没有办法为 A 和 B 分别设置 my_param 或设置它而不会出现错误?
仅使用调用无法完成此操作super(),因为链中最后一个类的超类将是object,它不带my_param参数。
有关将参数传递给具有多重继承的方法的更多讨论,请参阅python 多重继承使用 super 将参数传递给构造函数__init__()。
因此,您需要更改X为显式调用超类 init 方法,而不是使用super(). 并且A和B不应该调用super().__init__(),因为它们是 的子类object,而 且在其 中不执行任何操作__init__()。
class A:
def __init__(self, my_param):
self.my_param = my_param
class B:
def __init__(self, my_param):
self.my_param = my_param * 2
class X(A, B):
def __init__(self, my_param):
A.__init__(self, my_param=my_param)
B.__init__(self, my_param=my_param)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4947 次 |
| 最近记录: |