**: 解釋的很深刻
很多人喜歡將多型與多型性二者混為一談,然後百思不得其解,其實只要分開看,就會很明朗。
多型指的是一類事物有多種形態,(乙個抽象類有多個子類,因而多型的概念依賴於繼承)
序列型別有多種形態:字串,列表,元組
動物有多種形態:人,狗,豬
#多型:同一種事物的多種形態,動物分為人類,豬類(在定義角度)
class
animal:
defrun(self):
raise attributeerror('
子類必須實現這個方法')
class
people(animal):
defrun(self):
print('
人正在走')
class
pig(animal):
defrun(self):
print('
pig is walking')
class
dog(animal):
defrun(self):
print('
dog is running')
peo1=people()
pig1=pig()
d1=dog()
peo1.run()
pig1.run()
d1.run()
importabcclass animal(metaclass=abc.abcmeta): #
同一類事物:動物
@abc.abstractmethod
deftalk(self):
pass
class people(animal): #
動物的形態之一:人
deftalk(self):
print('
say hello')
class dog(animal): #
動物的形態之二:狗
deftalk(self):
print('
say wangwang')
class pig(animal): #
動物的形態之三:豬
deftalk(self):
print('
say aoao
')
import(1)什麼是多型性(注意:多型與多型性是兩種概念)abcclass file(metaclass=abc.abcmeta): #
同一類事物:檔案
@abc.abstractmethod
defclick(self):
pass
class text(file): #
檔案的形態之一:文字檔案
defclick(self):
print('
open file')
class exefile(file): #
檔案的形態之二:可執行檔案
defclick(self):
print('
execute file
')
多型性是指具有不同功能的函式可以使用相同的函式名,這樣就可以用乙個函式名呼叫不同內容的函式。在物件導向方法中一般是這樣表述多型性:向不同的物件傳送同一條訊息,不同的物件在接收時會產生不同的行為(即方法)。也就是說,每個物件可以用自己的方式去響應共同的訊息。所謂訊息,就是呼叫函式,不同的行為就是指不同的實現,即執行不同的函式。
#3、多型性:一種呼叫方式,不同的執行效果(多型性)
deffunc(obj):
obj.run()
func(peo1)
func(pig1)
func(d1)
#peo1.run()
#pig1.run()
#多型性依賴於:繼承
##多型性:定義統一的介面,
def func(obj): #
obj這個引數沒有型別限制,可以傳入不同型別的值
obj.run() #
呼叫的邏輯都一樣,執行的結果卻不一樣
引數animal就是對態性的體現
... animal.talk()
...>>> people1=people() #
產生乙個人的物件
>>> pig1=pig() #
產生乙個豬的物件
>>> dog1=dog() #
產生乙個狗的物件
>>>func(people1)
say hello
>>>func(pig1)
say aoao
>>>func(dog1)
say wangwang
>>> def綜上可以說,多型性是乙個介面(函式func),多種實現(如f.click())func(f):
... f.click()
...>>> t1=text()
>>> e1=exefile()
>>>func(t1)
open file
>>>func(e1)
execute file
其實大家從上面多型性的例子可以看出,我們並沒有增加上面新的知識,也就是說python本身就是支援多型性的,這麼做的好處是什麼呢?
(1)增加了程式的靈活性
以不變應萬變,不論物件千變萬化,使用者都是同一種形式去呼叫,如func(animal)
(2)增加了程式額可擴充套件性
通過繼承animal類建立了乙個新的類,使用者無需更改自己的**,還是用func(animal)去呼叫
>>> class cat(animal): #注:多型:同一種事物的多種形態,動物分為人類,豬類(在定義角度) 多型性:一種呼叫方式,不同的執行效果(多型性)屬於動物的另外一種形態:貓
... def
talk(self):
...
print('
say miao')
...>>> def func(animal): #
對於使用者來說,自己的**根本無需改動
... animal.talk()
...>>> cat1=cat() #
例項出乙隻貓
>>> func(cat1) #
甚至連呼叫方式也無需改變,就能呼叫貓的talk功能
say miao
'''這樣我們新增了乙個形態cat,由cat類產生的例項cat1,使用者可以在完全不需要修改自己**的情況下。使用和人、狗、豬一樣的方式呼叫cat1的talk方法,即func(cat1)
'''
Python 3 多型與多型性
多型 同一事物的多種形態 多型性 指的是可以在不考慮物件的型別的情況下而直接使用物件 import abc class animal metaclass abc.abcmeta 同一事物 動物 abc.abstractmethod def talk self pass class people an...
python 類的多型與多型性
多型 多型指的是一類事物有多種形態 如 動物有多種形態 人 狗 豬。多型性 指在不考慮例項型別的情況下使用例項,多型性分為靜態多型性和動態多型性。靜態多型性 任何型別都可以用運算子 進行運算。eg 字串 字串 數字 數字 列表 列表。我們在使用 號時也沒有考慮型別 動態多型性如下 動態多型性 imp...
類的多型與多型性
多型是指一類事物有多種形態 class animal def speak self print f 開口說話 動物的形態之一 人 class people animal def speak self print 呵呵呵 動物的形態之二 狗 class duck animal def speak se...