博主vx: haitangyijiusu 。很高兴认识你!偶尔带huo,都是精挑细选信得过的产品,欢迎来支持,期待和您相遇!
网上很多的文章对python的super作用介绍时都说是子类中为了使用父类的方法,但是真的是这样吗?
为了验证这一说法,我们来写一段代码,首先,我们声明四个类,这四个类构成菱形继承。即:
代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class A:
def __init__(self):
print("A")
class B(A):
def __init__(self):
print("B")
super().__init__()
class C(A):
def __init__(self):
print("C")
super().__init__()
class D(B,C):
def __init__(self):
print("D")
super().__init__()
d = D()
如果按照“super是调用父类的方法”这一说法,打印顺序应该是:
D
B
A
C
A才对
我们执行代码后看到打印结果是:、
D
B
C
A
所以super调用父类的方法这一说法并不准确。
实际上Python中的super()方法设计目的是用来解决多重继承时父类的查找问题,其调用顺序遵循的是mro算法。关于MRO算法,可以自行百度了解下。