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