類即對(duì)象,就像哺乳動(dòng)物,屬性是可以遺傳的,這點(diǎn)就是類的繼承
兒子相對(duì)父親,就像是子類相對(duì)父類,子類有父類的全部屬性,而且子類也可以重新定義自己的屬性值,來覆蓋父類的屬性值
當(dāng)我們定義一個(gè)class的時(shí)候,可以從某個(gè)現(xiàn)有的class繼承,新的class稱為子類,而被繼承的class稱為基類、父類。
如下示例代碼:
class a():
def run(self):
print('a class...')
class b(a):
def run(self):
print('b class...')
class c(a):
def hello(self):
print('hello c')
- 首先定義一個(gè)a類,里面有一個(gè)run()方法
- 然后定義一個(gè)b類,繼承與a類,而且里面有一個(gè)和a類一樣的方法run,且會(huì)覆蓋a的run方法
- 再定義一個(gè)c類,同樣繼承a類,但是并未重寫run方法,而是重新定義一個(gè)新的方法hello
下面來初始化類的值,以及使用函數(shù)名看看情況
ac = a()
bc = b()
cc = c()
ac.run()
# 結(jié)果:a class...
bc.run()
# 結(jié)果:b class...
cc.run()
# 結(jié)果:a class...
cc.hello()
# 結(jié)果:hello c
從上面結(jié)果看,可以得到如下結(jié)論:
- ac打印是
a class...
,正是a類中定義的輸出 - bc打印是
b class...
,說明b的重新定義run并覆蓋了父類的run方法 - cc打印是
a class...
,c并沒有定義run,它的run方法是從父類a里面繼承過來的,自己定義了hello方法
繼承:子類從繼承的父類中,得到父類的全部屬性和方法
接下來就是類的特性——多態(tài)
多態(tài),意思就是多種形態(tài),這里用動(dòng)物來作比較最合適
首先定義一個(gè)動(dòng)物的父類:
class Animal():
def get_type(self):
print("Animal...")
然后定義一個(gè)猴子類,繼承動(dòng)物:
class Monkey(Animal):
def get_type(self):
print("Monkey...")
再定義一個(gè)小白鼠類,繼承動(dòng)物:
class Mouse(Animal):
def get_type(self):
print("Mouse...")
接著定義一個(gè)人類,繼承猴子:
class People(Monkey):
def get_type(self):
print("People...")
定義好三個(gè)類之后,然后定義一個(gè)適用動(dòng)物類的函數(shù):
def get_animal(animal):
animal.get_type()
get_animal函數(shù)接收一個(gè)動(dòng)物類的對(duì)象參數(shù),然后運(yùn)行它的get_type()方法
最后實(shí)例化剛才定義的所有類,然后調(diào)用get_animal函數(shù)看看
animal = Animal()
monkey = Monkey()
mouse = Mouse()
people = People()
get_animal(animal)
# 結(jié)果:Animal...
get_animal(monkey)
# 結(jié)果:Monkey...
get_animal(mouse)
# 結(jié)果:Mouse...
get_animal(people)
# 結(jié)果:People...
以上代碼就是檢測類的多態(tài)。都是基于同一個(gè)父類,所以肯定有父類的方法,但此時(shí)他們不再是父類或者是同一種類,而是各種形態(tài)的類。
這也就是類的多態(tài)性【有點(diǎn)萬變不離其宗的意思】
一個(gè)小白肯定會(huì)問的小問題:定義一個(gè)類,括號(hào)內(nèi)有的是空,有的是放入父類。我記得每個(gè)類都會(huì)繼承object類,為什么有的可以寫空呢?
答:python3隱式繼承了object,所以python3中寫不寫繼承object都是沒有區(qū)別的 。【不過在Python2.x是有區(qū)別的】
Python3教程--傳送門