1在学习python多继承过程中出现了一个异常,实在是搞不清楚问题出在哪里,求大神解答
class People(object):
def __init__(self,name,sex):
self.name=name
self.sex=sex
class Teacher(People):
def __init__(self, name, sex, student):
super(Teacher, self).__init__(name, sex)
self.student=student
class Father(People):
def __init__(self,name,sex,child):
super(Father,self).__init__(name,sex)
self.child=child
class Disen(Father,Teacher):
def __init__(self,name,sex,child,student):
super(Disen,self).__init__(name,sex,child)
super(Disen,self).__init__(name,sex,student)
print(Disen.__mro__)
disen=Disen('disen_','male','judy','student1')
异常代码
F:MypythonProjectvenvScriptspython.exe F:/MypythonProject/my_file.py F:/
(<class '__main__.Disen'>, <class '__main__.Father'>, <class '__main__.Teacher'>, <class '__main__.People'>, <class 'object'>)
Traceback (most recent call last):
File "F:/MypythonProject/my_file.py", line 185, in <module>
disen=Disen('disen_','male','judy','student1')
File "F:/MypythonProject/my_file.py", line 182, in init
super(Disen,self).__init__(name,sex,child)
File "F:/MypythonProject/my_file.py", line 178, in init
super(Father,self).__init__(name,sex)
TypeError: __init__() missing 1 required positional argument: 'student'
问题:
1在调试过程中,Disen类实例执行构造函数时首先调用了Father类的构造函数,但是错误提示Father类缺少一个student属性,这个属性是定义在Teacher类中,实在搞不清楚,这个应该是我对钻石继承理解不了,希望大神能够结合我的错误讲解一下钻石继承的概念,谢谢
首先应该避免多重继承、多级继承,不然代码质量大打折扣了。不妨了解一下 组件化编程 与 接口编程 相关知识。
在这个例子中,你可以显式调用父类的 __init__() 方法,代替 super() ,如下