前言
在面向对象-继承部分已经有过super继承的使用,这里独立出来梳理一下
格式:super().方法(参数) # 对python3有效
Super()
代码部分:
# super()继承
class People():
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("---- 这是调用了People的eat ----")
class Teacher(People):
# 初始化Teacher的时候老师的属性不仅仅有name和age,还有teach_subject属性
# 需要继承父类的__init___基础上再加上teach_subject属性
def __init__(self,name,age,teach_subject):
super().__init__(name,age) # 继承父类的__init__方法
self.teach_subject = teach_subject
print("姓名是:{},年龄是:{}, 教学科目:{}".format(self.name, self.age, self.teach_subject))
# 父类的eat不满足我们的需求,我们需要在继承父类eat的基础上继续增加我们想要的
def eat(self):
super().eat() # 继承并调用父类eat方法
print("---- 这是调用了Teacher的eat ----")
teac = Teacher("suner",20,"数学")
teac.eat()
执行结果:
使用super的优势在于继承多个类的时候不需要写类名,可以直接用super关键字代替,即使之后父类名称修改了,子类也不需要随即更改
代码部分:
class A():
def a_func_01(self):
print("---- a_func_01 ----")
def a_func_02(self):
print("---- a_func_02 ----")
class B():
def b_func_01(self):
print("---- b_func_01 ----")
def b_func_02(self):
print("---- b_func_02 ----")
class C(B,A):
def c_func_01(self):
super().a_func_01() # 继承A类方法
super().b_func_01() # 继承B类方法
c = C()
c.c_func_01()
执行结果: