IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
由一個(gè)示例引入鴨子類型:
- >>> class Person: # 人類
- ... def walk(self): # 走路
- ... print('this man is walking like a duck')
- ... def swim(self): # 游泳
- ... print('this man is swimming like a duck')
- ...
- >>> class Duck: # 鴨類
- ... def walk(self): # 走路
- ... print('duck is walking')
- ... def swim(self): # 游泳
- ... print('duck is swimming')
- ...
- >>> def swimming(arg):
- ... # 定義實(shí)例實(shí)現(xiàn)游泳功能
- ... arg.walk()
- ... arg.swim()
- ...
- >>> person = Person() # 創(chuàng)建Person類實(shí)例person
- >>> duck = Duck() # 創(chuàng)建Duck類實(shí)例duck
- >>> swimming(person) # 調(diào)用的是Person類中的walk()和swim()
- this man is walking like a duck
- this man is swimming like a duck
- >>> swimming(duck) # 調(diào)用的是Duck類中的walk()和swim()
- duck is walking
- duck is swimming
上述程序中,定義了兩個(gè)類,分別為Person類和Duck類。這兩個(gè)類具有同名的兩個(gè)方法walk()和swim()。為了方便對(duì)相同方法的類進(jìn)行統(tǒng)一管理,創(chuàng)建了一個(gè)函數(shù)swimming(),其參數(shù)是一個(gè)實(shí)例。創(chuàng)建Person類實(shí)例person和Duck類實(shí)例duck,然后分別調(diào)用swimming()函數(shù),參數(shù)是person和duck,這樣就通過swimming()函數(shù)分別調(diào)用了兩個(gè)類中的walk()和swim()方法。如果Person類和Duck類中還有eat()和say()等多個(gè)方法,那么也可以放入swimming()函數(shù)中,通過它來調(diào)用,這樣就不需要采用類的實(shí)例分別調(diào)用每一個(gè)方法,從而提高了效率。
下面是一個(gè)使用鴨子類型的示例。先創(chuàng)建Car類,類中包含實(shí)例屬性color,實(shí)例方法run(),代碼如下:
- >>> class Car:
- ... def __init__(self, color):
- ... self.color = color
- ... def run(self):
- ... print('{}小汽車在跑'.format(self.color))
- ...
再創(chuàng)建 Cat類,類中包含實(shí)例屬性name,實(shí)例方法run(),代碼如下:
- >>> class Cat:
- ... def __init__(self, name):
- ... self.name = name
- ... def run(self):
- ... print('貓咪{}在跑'.format(self.name))
- ...
然后創(chuàng)建公共函數(shù)get_run(),調(diào)用run()方法,代碼如下:
- >>> def get_run(obj):
- ... obj.run()
- ...
最后實(shí)例化,創(chuàng)建Car類實(shí)例car并傳遞參數(shù)'紅色',創(chuàng)建Cat類實(shí)例cat并傳遞參數(shù)'警長',分別以實(shí)例car和cat作為參數(shù),使用公共函數(shù)get_run()調(diào)用實(shí)例方法run(),代碼如下:
- >>> car = Car('紅色')
- >>> cat = Cat('警長')
- >>> get_run(car)
- 紅色小汽車在跑
- >>> get_run(cat)
- 貓咪警長在跑
通過以上示例可知,鴨子類型增加了程序的靈活性和可擴(kuò)展性,提高了代碼的復(fù)用性。鴨子類型與多態(tài)的區(qū)別是,鴨子類型不依靠繼承,而多態(tài)依靠繼承,多態(tài)功能的實(shí)現(xiàn)是方法的重寫。
更多內(nèi)容
>>本文地址:http://m.hqfphsz.com/zhuanye/2021/69062.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?