1. super的简介
作用:super方法用来继承父类
super方法,会根据传入super函数当中的 本类
以及当前所在的对象
,来找到本类的父类,然后将对象(self)传给父类中,同时将属性
传给父类;由此,达到继承父类的效果
常用语法:
# 方法1
Role.__init__(self,name,age) # 最原始继承父类属性的方法
# 方法2
super(当前所在的类, 当前所在的对象).__init__(属性名) # super写法1:完整写法,将本类名和self传入super,并传name参数到父类到init方法中
# 方法3
super().__init__(属性名) # super写法2:简单写法,默认传本类名和self
注意:super在python3里面比较好用,在python2里比较难用
2. 单继承中的super
在单继承
中,super的作用就是找父类
class Role:
def __init__(self,name,age):
self.name = name
self.age = age
class Student(Role):
pass
class Worker(Role):
def __init__(self,name,age,job):
self.job = job
# Role.__init__(self,name,age) # 最原始继承父类属性的方法
# super(Worker, self).__init__(name,age) # super写法1:完整写法,将本类名和self传入super,并传name参数到父类到init方法中
super().__init__(name,age) # super写法2:简单写法,默认传本类名和self
jack = Worker('jack',22,'teacher')
print(jack.name,jack.age,jack.job) # jack 22 teacher
3. 多继承中的super
在多继承
中,super的作用是按照mro的顺序找下一个类
见下例:
class A():
def func(self):
print('A')
class B(A):
def func(self):
super().func()
print('B')
class C(A):
def func(self):
super().func()
print('C')
class D(B,C):
def func(self):
super().func()
print('D')
print(D.mro()) # [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
obj = D()
obj.func() # A C B D
按类的继承来说,obj.func()的输出本应为 A B D 才对,但是,实际输出为 A C B D;原因是,在多继承当中,super的作用是按照mro的顺序去找下一个类,而不是单继承中的单纯找父类