Python3 类和继承和组合
注意如果子類Shark()引用父類Fish()時(shí),如果不使用super()函數(shù),則Shark()子類產(chǎn)生的對(duì)象時(shí)沒法調(diào)用move()方法的,因?yàn)椴淮嬖趚,y參數(shù)
使用super()函數(shù),則可以move(),而且只需要指出父類的方法,不需要self。
如果有多重繼承,則只需要修改Shark(Fish)中的Fish名稱,不需要修改super()函數(shù)內(nèi)的方法名,super()函數(shù)會(huì)自動(dòng)找到父類的方法。
“super函數(shù)超級(jí)之處在于你不需要明確給出任何基類的名字,它會(huì)自動(dòng)幫你找出所有積累以及對(duì)應(yīng)的方法。由于不用給出基類的名字,這就意味著你如果改變了類繼承關(guān)系,只要改變class語句里的父類即可,而不必在代碼中修改所有被繼承的方法”
?
另一個(gè)例子:
1 class A(): 2 def __init__(self): 3 print('進(jìn)入A') 4 print('離開A') 5 6 class B(A): 7 def __init__(self): 8 print('進(jìn)入B') 9 #A.__init__(self) 10 super().__init__() 11 print('離開B') 12 13 class C(A): 14 def __init__(self): 15 print('進(jìn)入C') 16 #A.__init__(self) 17 #super().__init__() 18 print('離開C') 19 20 class D(B,C): 21 def __init__(self): 22 print('進(jìn)入D') 23 #B.__init__(self) 24 #C.__init__(self) 25 super().__init__() 26 print('離開D') 27 28d=D()會(huì)出現(xiàn)什么呢?
?
##############################
組合:
1 class Turtle: 2 def __init__(self,x): 3 self.num = x 4 5 class Fish: 6 def __init__(self,x): 7 self.num = x 8 9 class Pool: 10 def __init__(self, x, y): 11 self.turtle = Turtle(x) 12 self.fish = Fish(y) 13 def print_num(self): 14 print('水池里共有%d只烏龜,%d只魚'%(self.turtle.num, self.fish.num)) 15 #這就是組合,把一個(gè)類的對(duì)象,放到另一個(gè)類里引用 16 #這不是繼承,是組合 View Code?把沒有關(guān)系的類進(jìn)行組合,可以避免繼承的一些問題
##############################
mixin:
https://fishc.com.cn/thread-48888-1-1.html
?
轉(zhuǎn)載于:https://www.cnblogs.com/vigossr/p/10194425.html
總結(jié)
以上是生活随笔為你收集整理的Python3 类和继承和组合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10设置默认打开方式
- 下一篇: Django (auth模块、User对