物件導向的最大優點之一就是可以通過繼承來減少**,同時靈活地定製新類。
子類繼承父類後,就有了父類的屬性和方法,除了父類的私有屬性和私有方法(屬性名或方法名前面有兩個下劃線"__"
的),子類中還可以通過過載來修改父類的方法,以實現與父類不同的行為或表現能力。
例六:
class
ant:
def__init__
(self, x=
0, y=
0,color=
'black'):
#定義構造方法
self.x = x
self.y = y
self.color = color
defcrawl
(self, x, y)
:#定義方法,模擬爬行
self.x = x
self.y = y
print
('爬行...'
) self.info(
)def
info
(self)
:print
('當前位置:(%d, %d)'
%(self.x, self.y)
)def
attack
(self)
:#定義方法,模擬攻擊
print
('用嘴咬!'
)class
flyant
(ant)
:#定義子類,繼承def的父類是ant類
defattack
(self)
:#重新定義了函式attack(),這叫函式過載
print
('用尾針!'
)def
fly(self, x, y)
:#定義新方法(模擬飛行)
print
('飛行...'
) self.x = x
self.y = y
self.info(
)
flyant = flyant(color=
'red'
)#例項化子類,
flyant.crawl(3,
5)flyant.fly(10,
14)flyant.attack(
)
輸出:
爬行...
當前位置:(3,
5)飛行..
.當前位置:(10,
14)用尾針!
**說明:
程式一開始定義了父類ant
,具有爬行、用嘴咬的能力,之後定義了子類flyant
,子類繼承了父類爬行的能力,修改了攻擊方式,新增了飛行能力。之後例項化呼叫其爬行、飛行、進攻方式。
在物件導向程式設計的語言中,有的允許多重繼承,即乙個類可以繼承多個類,有的只允許單一繼承;python則允許多重繼承。
多重繼承的形式:
class
《子類名》
(父類名1
, 父類名2,.
..):
pass
多重繼承的繼承順序很重要,如果繼承的父類有多個相同的方法名(包括構造方法),但在類中使用時未指定父名,則python從左到右搜尋,即呼叫先繼承的類中的同名的方法。
例七:先定義類:
classa:
#定義類a
definfo
(self)
:print
('a'
)classb:
#定義類b
definfo
(self)
:print
('b'
)class
c1(a, b)
:#定義子類c1
pass
class
c2(b, a)
:#定義子類c2
pass
class
c3(a, b)
:#定義子類c3
definfo
(self)
: a.info(self)
b.info(self)
例項化:
c_1 = c1(
)c_1.info(
)print
('**************************'
)c_2 = c2(
)c_2.info(
)print
('**************************'
)c_3 = c3(
)c_3.info(
)
輸出:
a
**************************
b**************************
ab
**分析:
上面已經多次提到過函式過載,這裡再詳細說下。
當子類繼承父類時,子類如果要想修改父類的行為,則應使用方法過載來實現。
方法過載的基本方式:在子類中定義乙個與所繼承的父類中要過載方法的名字一樣的方法。(即定義的方法名要與被過載的方法的名字一樣)
8 3 多重繼承與派生類成員標識
由多個基類共同派生出派生類的繼承結構稱為 多重繼承 或多繼承 multiple inheritance 多重繼承是從實際的需要產生的。例如 從大學在冊人員產生學生和教職工。再從學生派生研究生。如果考慮到研究生可以當助教,那麼他們又有了教職工的特性。教職工可分為教師和行政人員,但行政人員也可以去授課,...
8 3 定義模型類
接下來首先以 圖書 英雄 管理為例進行演示。建立應用booktest,在models.py 檔案中定義模型類。from django.db import models 定義圖書模型類bookinfo class bookinfo models.model btitle models.charfiel...
python 類 繼承 python 類的繼承
1 所用的類都可以被繼承 2 沒有繼承其他類的類必然有乙個父類 object 3子類可以擁有父類的 init 裡的類容 派生子類除了父類的一些屬性,還會有自己的屬性和方法,這些就叫派生 如何使用 實現 class animal def init self,name,attack,hp self.na...