假设:
class Father():
def __init__(self,fathername):
self.papa = f"The father is {fathername.upper()}"
class Mother():
# Mother class is COMPLETELY DIFFERENT AS Father.
# The important thing is that they both built an attribute each.
def __init__(self,mothername):
self.mama = f"the mother is {mothername.lower()}"
class Child3(Father,Mother):
def __init__(self,name,fathername,mothername):
Father.__init__(self,fathername)
Mother.__init__(self,mothername)
self.name=name
以下两项工作:
c = Child3('Noa',fathername='J',mothername='M')
c = Child3('Noa','J','M')
到目前为止还不错。 但假设我想从几个类继承(不是多个嵌套继承,而是一个类从几个不从任何其他类继承的类继承) 如何使用super()初始化父类
以下操作不起作用:
class Child4(Father,Mother):
def __init__(self,name,fathername,mothername):
super().__init__(self,fathername=fathername,mothername=mothername)
self.name=name
TypeError: init() got multiple values for argument 'fathername'
以前的一些磋商:
How does Python's super() work with multiple inheritance? 这是一个非常完整的回答非常好,我已经投票了一些时间前了。尽管如此,这个问题还是有点不同,并非完全是我在这里提出的问题,即MRO(方法解决顺序)在这里并不重要。我想实现一种硬代码初始化父类以访问所有属性的方法。在上述问题中,投票最多的答案在父类中没有属性。在第二个投票最多的答案中,父类也没有属性。然而,在另一个答案中,有一个关于多重继承的MRO的非常完整的解释,这也不是重点,因为这里有一个单一的继承层次
在另一个问题中,有很多正面的赞成票,也没有父类的属性:Calling parent class __init__ with multiple inheritance, what's the right way?
这是一个更接近的解决方案,但没有使用super()Python - Calling __init__ for multiple parent classes实现解决方案 实际上是建议远离继承范式
这是一个很接近的例子:calling init for multiple parent classes with super?但是我看到父类中有super(),这是适得其反的,因为目标是不必修改父类
为了理解这个示例的使用以及为什么我必须使用继承,我认为第一个父类调用一个API并执行几个1000s代码的NLP过程来提取API响应的数据。第二个父类也是如此。然后,子类将尝试使用NLP进一步比较两者
给母亲和父亲上课。它们不是我编的。我没有机会修改它们。他们不依赖任何其他阶级
孩子有一个母亲和一个父亲,最好将其设计为包含母亲和父亲属性。我认为以下类定义对您的案例更有意义:
印刷品:
相关问题 更多 >
编程相关推荐