前言
在面向對象-繼承部分已經有過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()
執行結果: