多型及多型性和鴨子型別

2022-05-19 12:58:39 字數 2430 閱讀 7467

多型及多型性

多型指的是同一類/種事物的不同形態(其實就是繼承關係的表現)

多型只是一種格式形態,它的主要體現是多型性

多型性在類中的簡單表現形式:

class animal():

def run(self):

print('run fast')

class mouse(animal):

def sound(self):

print('5555')

obj=mouse() #你看,這裡是在mouse類中進行了例項化,但下面的obj呼叫的run()在mouse類中並不存在

#我們自然而然就會想到mouse繼承了animal,所以obj會跑到animal類中去找run()這個函式

#為什麼程式會通過.run()自己自動跑到父類裡面去找,這就是多型提供的。

obj.run()

多型性:在多型的背景下,可以在不用考慮物件具體型別(也就是不管是子類還是父類中存在這種方法)的前提下而直接使用物件

多型性的精髓:統一(統一方法。繼承關係下,子類方便呼叫父類中的方法)

當然,匯入abc模組,能夠讓子類強制執行父類的功能(也就是子類自己有該方法,但只要父類中也有,子類就必須用父類的。有點不講道理,所以用的比較少)

import abc #

abstract class

class animal(metaclass=abc.abcmeta):

@abc.abstractmethod

defeat(self):

pass

@abc.abstractmethod

defdrink(self):

pass

@abc.abstractmethod

defrun(self):

pass

@abc.abstractmethod

defbark(self):

pass

#obj=animal() # 抽象基類本身不能被例項化

class

cat(animal):

defeat(self):

print('

cat eat')

defdrink(self):

print('

cat drink')

defrun(self):

print('

cat run')

defbark(self):

print('

喵喵喵'

)c=cat()

view code

擴充套件(python統一思想----一切皆物件,linux統一思想----一切皆檔案)

鴨子型別

python是比較崇尚鴨子型別的,目的也是也是和多型一樣,為了統一。只不過鴨子型別統一**的格式。

例子一(這是非常經典的乙個例子):

class

duck():

defwalk(self):

print('

i walk like a duck')

defswim(self):

print('

i swim like a duck')

class

person():

defwalk(self):

print('

this one walk like a duck')

defswim(self):

print('

this man swim like a duck

')

view code

例子二:

class

disk:

defread(self):

print('

disk read')

defwrite(self):

print('

disk write')

class

memory:

defread(self):

print('

mem read')

defwrite(self):

print('

mem write')

class

cpu:

defread(self):

print('

cpu read')

defwrite(self):

print('

cpu write')

obj1=disk()

obj2=memory()

obj3=cpu()

obj1.read()

obj2.read()

obj3.read()

view code

多型 多型性和鴨子型別

目錄多型指的是同一種事物有多種形態,比如水有液態 固態和氣態。乙個抽象類有多個子類,因而多型的概念依賴於繼承。class animal def talk self pass class dog animal def talk self print 汪汪汪 class cat animal def t...

多型性與鴨子型別

多型指的是一類事物有多種形態,比如動物有多種形態 貓 狗 豬 class animal 同一類事物 動物 deftalk self pass class cat animal 動物的形態之一 貓 deftalk self print 喵喵喵 class dog animal 動物的形態之二 狗 de...

多型性與鴨子型別

class animal pass class people animal pass class dog animal pass class pig animal pass為何要有多型 多型會帶來什麼樣的特性 多型性指的是可以在不考慮物件具體型別的情況下而直接使用物件 class animal 統一...