python里的super().init()有什么用?

对于python里的super().__init__()有什么作用,很多同学没有弄清楚。

简单的说super().__init__(),就是继承父类的init方法,同样可以使用super()去继承其他方法。

下面是三种不同的继承、调用,对比他们的区别,搞清楚super().__init__()的用途。

1、从实例中对比(python3)

1.1、实例

 

 

子类名称继承内容
Puple 继承所有
Puple_Init 继承,但覆盖了init方法
Puple_Super 继承,但覆盖了init方法,并在init里面添加了super().__init__()

1.2、运行结果与对比

 

 

1.3、完整代码

 

 

2、关于继承顺序

最底层:先写一个父类A

1 class A:
2     def __init__(self):
3         print('A')

第二层:让 B、C、D 继承自A

 1 class B(A):
 2     def __init__(self):
 3         print('B')
 4         super().__init__()
 5 
 6 class C(A):
 7     def __init__(self):
 8         print('C')
 9         super().__init__()
10 
11 class D(A):
12     def __init__(self):
13         print('D')
14         super().__init__()

第三层: E、F、G 继承

 1 class E(B, C):
 2     def __init__(self):
 3         print('E')
 4         super().__init__()
 5 
 6 class F(C, D):
 7     def __init__(self):
 8         print('F')
 9         super().__init__()
10 
11 class G(E, F):
12     def __init__(self):
13         print('G')
14         super().__init__()

看看G的继承顺序

 

 

 

 

我们发现G继承自E, F是并列的,初始化的时候不会先把E初始化完毕才初始化F。

3、super() 在 python2、3中的区别
Python3.x 和 Python2.x 的一个区别: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

1 例:
2 python3 直接写成 : super().__init__()
3 python2 必须写成 :super(本类名,self).__init__()

Python3.x 实例:

1 class A:
2      def add(self, x):
3          y = x+1
4          print(y)
5 class B(A):
6     def add(self, x):
7         super().add(x)
8 b = B()
9 b.add(2)  # 3

 

posted @ 2021-12-06 21:22  咖啡陪你  阅读(467)  评论(0)    收藏  举报