目录
1 从实例中对比(python3)
1.1 实例
1.2 运行结果与对比
1.3 完整代码
2 关于继承顺序
3 super() 在 python2、3中的区别
python里的super().init()有什么用?
对于python里的super().__init__()有什么作用,很多同学没有弄清楚。
简单的说super().__init__(),就是继承父类的init方法,同样可以使用super()去继承其他方法。
下面是三种不同的继承、调用,对比他们的区别,搞清楚super().__init__()的用途。
def __init__(self,age)中的参数为外部输入的,还需要匹配到类对象自己的属性中。如果self.name=name了,则不需要通过super进行继承,否则需要super。换句话说,super代替了父类中的self.name=name。
子类名称 | 继承内容 |
---|---|
Puple | 继承所有 |
Puple_Init | 继承,但覆盖了init方法 |
Puple_Super | 继承,但覆盖了init方法,并在init里面添加了super().__init__() |
最底层:先写一个父类A
class A:
def __init__(self):
print('A')
第二层:让 B、C、D 继承自A
class B(A):
def __init__(self):
print('B')
super().__init__()
class C(A):
def __init__(self):
print('C')
super().__init__()
class D(A):
def __init__(self):
print('D')
super().__init__()
第三层: E、F、G 继承
class E(B, C):
def __init__(self):
print('E')
super().__init__()
class F(C, D):
def __init__(self):
print('F')
super().__init__()
class G(E, F):
def __init__(self):
print('G')
super().__init__()
看看G的继承顺序
我们发现G继承自E, F是并列的,初始化的时候不会先把E初始化完毕才初始化F。
Python3.x 和 Python2.x 的一个区别: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :
例:
python3 直接写成 : super().__init__()
python2 必须写成 :super(本类名,self).__init__()
Python3.x 实例:
class A:
def add(self, x):
y = x+1
print(y)
class B(A):
def add(self, x):
super().add(x)
b = B()
b.add(2) # 3
Python2.x 实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class A(object): # Python2.x 记得继承 object
def add(self, x):
y = x+1
print(y)
class B(A):
def add(self, x):
super(B, self).add(x)
b = B()
b.add(2) # 3