Python super() review

super()作用

1.super()本质也就是类,关键点在super()是引用的哪个类?
2.super()与直接引用父类的区别在于:当父类是唯一的并且只有1层的时候,是相同的,但是如果父类有2层以上并且不是一一对应的情况,
super()比较合适,并且不会因为调用子类的时候,不会重复调用父类中的父类
3.如下举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Root(object):
def __init__(self):
print("this is Root")

class B(Root):
def __init__(self):
print("enter B")
# print(self) # this will print <__main__.D object at 0x...>
super(B, self).__init__()
print("leave B")

class C(Root):
def __init__(self):
print("enter C")
super(C, self).__init__()
print("leave C")

class D(B, C):

d = D()
print(d.__class__.__mro__)

在输入 D()函数以后,调用 B(),C(),其中 B()调用 super(),按照 python中含义,super()调用的并不是指他的父函数,即 Root(), 
而是在 D()的 mro顺序中,调用 B()的 index+1,即 C(),然后调用 Root(), 用 super()形成的子类D(),调用的优势在于,在调用 B(),
C()以后不会重复调用 B(),C()中的super()类,在多层继承的类中,可以防止基类的重复调用.

重点

1. spuer()不是单指父函数,主要作用是在多层继承中
2. super()函数本质是需要理解class的mro

参考文章:
super-considered-super