Python全棧開發實戰學習17

2021-09-11 19:38:49 字數 2866 閱讀 2634

多型性是指一類事物具有多種形態,比如動物有多種形態:人、豬、狗

import abc

class

animal

(metaclass=abc.abcmeta)

:# 同一類事物:動物

@abc.abstractclassmethod

deftalk

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

defclick

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

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

deffunc

(obj)

: obj.talk(

)

1.增加了程式的靈活性,以不變應萬變,用同一種形式去呼叫

2.增加了程式的可拓展性,通過繼承animal類建立了乙個新類,使用者無需更改自己的**,還是用func(animal)去呼叫

class

cat(animal)

:# 屬於動物的另一種形態:貓

deftalk

(self)

:print

('say miao'

)def

func

(animal)

:# 對於使用者來說,自己的**根本無需改動

animal.talk(

)cat1 = cat(

)# 例項出乙隻貓

func(cat1)

# 甚至連呼叫方式也無需改變,就能呼叫貓的talk功能

====

====

====

結果say miao

這樣我們就新增了乙個形態cat,由cat類產生的例項cat1,使用者可以在完全不需要修改自己**的情況下。使用和人、狗、豬一樣的方式呼叫cat1的talk方法,即func(cat1)

python崇尚鴨子型別,即:如果看起來像,叫聲像而且走起路來像鴨子,那麼它就是鴨子

python程式設計師通常根據這種行為來編寫程式。例如,如果想編寫現有對中象的自定義版本,可繼承該物件。

也可以建立乙個外觀和行為像,但與它無任何關係的全新物件,後者通常用於儲存程式元件的松耦合度。

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

class

txtfile

:def

read

(self)

:pass

defwrite

(self)

:pass

class

diskfile

:def

read

(self)

:pass

defwrite

(self)

:pass

例2

序列型別有多種形式:字串、列表、元祖,但他們沒有直接的繼承關係

# str,list,tuple都是序列型別

s =str

('hello'

)l =

list([

1,2,

3])t =

tuple((

4,5,

6))# 我們可以在不考慮三者型別的前提下使用s,l,t

s.__len__(

)l.__len__(

)t.__len__(

)len

(s)len

(l)len

(t)

Python全棧開發實戰學習6

把列表 0,1,2,3,4,5,6,7,8,9 中的每個元素加1 a i 1 for i in range 10 print a 結果 1 2,3 4,5 6,7 8,9 10 這樣的寫法就叫做列表生成式 列表是可迭代的,但不是迭代器 l 1 2,3 4,5 6 for i in l 生成了乙個迭代...

Python全棧開發實戰學習7

import module from module import xx from module.xx.xx import xx as rename from module.xx.xx import 編譯原始碼 python setup.py build 安裝原始碼 python setup.py i...

Python全棧開發實戰學習13

class 類名 屬性 方法 pass現實中先有物件後有類 物件1 李坦克 特徵 學校 oldboy 姓名 李坦克 性別 男 年齡 22 技能 吃飯 學習睡覺 物件2 王大陸 特徵 學校 oldboy 姓名 王大陸 性別 男 年齡 21 技能 吃飯 學習睡覺 物件3 牛深度 特徵 學校 oldboy...