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...