繼承
classa:
defspam(self):
print("
a.spam")
defadd(self, x,y):
return x+y
class
b(a):
defspam(self):
"""如果子類要對父類的方法進行重寫,再想呼叫父類的方法,就需要使用super().方法名() 的形式
"""print("
b.spam")
super().spam()
#呼叫父類的spam()
b =b()
b.spam()
print(b.add(8,8))
class
c:
def__init__
(self):
self.x = 100
defcompare(self, num):
if self.x>num:
return
self.x
else
:
return
num
class
d(c):
def__init__
(self):
super().
__init__() #
super() 函式的乙個常見用法是在__init__() 方法中確保父類被正確的初始化
self.x = 300 #
更改父類
self.y = 500d=d()
print(d.compare(101)) #
300 得到的結果也會更改
print(d.y) #
500print(d.x)
多繼承
#python中的多繼承
class
a:
deffoo(self):
print("
a類的方法")
class
b:
deffoo(self):
print("
b類的方法")
deffoo_1(self):
print("
b類專有的方法")
class
c(a,b):
pass
class
d(c, a):
pass
"""class d(a, c):
pass
會報錯:
typeerror: cannot create a consistent method resolution
order (mro) for bases a, c
原因分析參考:
"""c =c()
c.foo()
#>>>a類的方法
c.foo_1()
#>>>b類專有的方法
d =d()
d.foo()
#>>>a類的方法
print(d.mro())
#>>>[, , , , ]
總結:兩個概念:經典類,新式類
繼承搜尋的順序發生了改變,經典類多繼承屬性搜尋順序: 先深入繼承樹左側,再返回,開始找右側;
新式類多繼承屬性搜尋順序: 先水平搜尋,然後再向上移動
python基礎 繼承和多繼承
繼承 class a defspam self print a.spam defadd self,x,y return x y class b a defspam self 如果子類要對父類的方法進行重寫,再想呼叫父類的方法,就需要使用super 方法名 的形式 print b.spam super...
python入門 繼承 多繼承
定義 子類擁有父類的所有方法和屬性,子類可直接享受父類中封裝好的方法 語法 class 類名 父類名 pass繼承的傳遞性 c類繼承與b類,b類繼承於a類 覆蓋父類的方法 在子類中定義乙個和父類同名的方法並實現 super 函式 在重寫父類方法時,呼叫在父類中封裝的方法實現 例 def login ...
python 單繼承,多繼承
父類 class person def init self,name,age self.name name self.self.age age def introduce self print 父類方法person self.name 學生類 繼承 person class student pers...