父类方法的调用
- 可以使用父类名.方法名来调用
- 也可以使用super().方法名来调用
MRO顺序
Python官方采用了一个算法将复杂结构上所有的类全部都映射到一个线性顺序上,而根据这个顺序就能 够保证所有的类都会被构造一次。这个顺序就是MRO顺序。
查看MRO顺序
类名.mro()
类名.__mro__
单继承中的super()
直接去找父类中的方法
多继承中的super()
按照mro顺序来执行,super()调用的是mro顺序中的后一个类的方法
总结
1、MRO保证了多继承情况 每个类只出现一次
2、super().__init__相对于类名.__init__,在单继承上用法基本无差
3、但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次
4、是由多继承时,使用super方法,对父类的传参数,应该于python中super的算法导致的原因,必须把参数全部传递,否则会报错
5、多继承时,相对于使用类名.__init__方法,要把每个父类全部写一遍, 而使用super方法,只需写一句话便执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因