python不支援多型,也不用支援多型,而是一種多型的語言。
鴨子型別(duck typing):是動態型別的一種風格,不是由繼承特定的類或實現特定的介面,而是當前的方法和屬性的集合決定,鴨子型別中關注的不是物件的型別本身,而是他如何使用。
簡單理解:在使用支援鴨子型別的語言中,乙個函式可以接受任意型別的物件,只要該物件具有實現了相同的方法即可。
使用例項:
class disk:
def read(self):
print('disk read')
self.write()
def write(self):
print('disk write')
class text:
def read(self):
print('text read')
self.write()
def write(self):
print('text write')
def duck_demo(obj):
obj.read()
disk = disk()
text = text()
duck_demo(disk)
duck_demo(text)
#disk.read()
#disk.write()
#text.read()
#text.write()
"""disk read
disk write
text read
text write
"""
如上述所示,disk和text具有都實現了read()和write()方法,duck_demo()方法可以看做是乙個通知型介面,由該函式確定呼叫物件的哪個方法
鴨子型別特點:
鴨子型別 物件導向多型的理解
在程式設計中,鴨子型別 duck typing 是動態型別的一種風格。鴨子型別的核心概念在於乙個物件的有效語義,不是繼承自特定的類或者實現特定的方法,而是由當前的屬性和方法集合決定的。鴨子型別 可以這樣表述 乙隻鳥走起來像鴨子 游泳起來像鴨子 叫起來也像鴨子,那麼這只鳥可以被稱為鴨子 在鴨子型別中,...
python的鴨子型別
這次簡單介紹下 鴨子型別的概念。當看到乙隻鳥走起來像鴨子 游泳起來像鴨子 叫起來也像鴨子,那麼這只鳥就可以被稱為鴨子。鴨子型別關注點在物件的行為,而不是型別。在 python 和 go 中都可以實現鴨子型別。示例 如下 class duck def init self,name self.name ...
Python多型 鴨子型別
多型指的是一類事物有多種形態。動物有多種形態 人,狗,豬 import abcclass animal metaclass abc.abcmeta 同一類事物 動物 abc.abstractmethod deftalk self pass class people animal 動物的形態之一 人 ...