python之物件導向程式設計之多型與多型性

2021-08-21 01:27:20 字數 2156 閱讀 6831

1.什麼是多型

多型指的是同一種事物的多種形態

水-》冰、水蒸氣、液態水

動物-》人、狗、豬

2.為啥要用多型

多型性:

繼承同乙個類的多個子類中有相同的方法名

那麼子類產生的物件就可以不用考慮具體的型別而直接呼叫功能

多型性的優點:

1.增加了程式的靈活性

以不變應萬變,不論物件千變萬化,使用者都是同一種形式去呼叫,如func(animal)

2.增加了程式額可擴充套件性

通過繼承animal類建立了乙個新的類,使用者無需更改自己的**,還是用func(animal)去呼叫

# animal() #強調:父類是用來指定標準的,不能被例項化
#父類有的子類必須要有,而且還要同名
import abc

class animal(metaclass=abc.abcmeta): #同一類事物:動物

@abc.abstractmethod

def talk(self):

pass

class people(animal): #動物的形態之一:人

def talk(self):

print('say hello')

class dog(animal): #動物的形態之二:狗

def talk(self):

print('say wangwang')

class pig(animal): #動物的形態之三:豬

def talk(self):

print('say aoao')

import abc

class file(metaclass=abc.abcmeta): #同一類事物:檔案

@abc.abstractmethod

def click(self):

pass

class text(file): #檔案的形態之一:文字檔案

def click(self):

print('open file')

class exefile(file): #檔案的形態之二:可執行檔案

def click(self):

print('execute file')
peo=people()

dog=dog()

pig=pig()

#peo、dog、pig都是動物,只要是動物肯定有talk方法

#於是我們可以不用考慮它們三者的具體是什麼型別,而直接使用

peo.talk()

dog.talk()

pig.talk()

#更進一步,我們可以定義乙個統一的介面來使用

def func(obj):

obj.talk()

3.鴨子型別

python推崇的是鴨子型別,只要你叫的聲音像鴨子,並且你走路的樣子也像鴨子,那你就是鴨子

l=[1,2,3]

# s='helllo'

# t=(1,2,3)

## print(l.__len__())

# print(s.__len__())

# print(t.__len__())

## # def len(obj):

# # return obj.__len__()

## print(len(l)) # l.__len__()

# print(len(s)) #s.__len__()

# print(len(t))

例2:利用標準庫中定義的各種『與檔案類似』的物件,儘管這些物件的工作方式像檔案,但他們沒有繼承內建檔案物件的方法

#二者都像鴨子,二者看起來都像檔案,因而就可以當檔案一樣去用

class txtfile:

def read(self):

pass

def write(self):

pass

class diskfile:

def read(self):

pass

def write(self):

pass

python之物件導向程式設計

物件導向的程式設計的核心是物件 上帝式思維 要理解物件為何物,必須把自己當成上帝,上帝眼裡世間存在的萬物皆為物件,不存在的也可以創造出來。物件是特徵和技能的結合,其中特徵和技能分別對應物件的資料屬性和方法屬性。優點是 解決了程式的擴充套件性。對某乙個物件單獨修改,會立刻反映到整個體系中,如對遊戲中乙...

Python之物件導向程式設計

類和物件 類是抽象的模板,比如我們抽象乙個學生類,很容易想到學生固有的一些屬性,比如名字,年齡等等,建立乙個學生類 class student object pass 複製 這裡的object是表明student類是從哪個類繼承來的,在python中object是所有類的父類 繼承的概念下文會提及 ...

python之物件導向程式設計

當使用 類名 實參 建立例項物件時,python直譯器的主要處理過程包括兩大步 首先會查詢該類物件是否實現了特殊方法 new 如果沒有實現,則去其父類中依次查詢,直到類物件object。class parent object def new cls,args,kwargs pass class ch...