Python工廠函數(shù)用法實(shí)例分析
本文實(shí)例講述了Python工廠函數(shù)用法。分享給大家供大家參考,具體如下:
參考了很多代碼、別人的文章以及書籍,最后自己做了適合自己理解的一種理解總結(jié)方式。
很多人說(shuō),工廠函數(shù)看上去像函數(shù),其實(shí)是類。我覺(jué)得這種方法有些牽強(qiáng),雖說(shuō)在OOP中Python有其自己對(duì)類以及對(duì)象的定義。在一定程度上這么說(shuō)是可以的。
我個(gè)人的理解,既然叫做工廠函數(shù),那么這一定是一個(gè)函數(shù)。不過(guò),看了許多例子后發(fā)現(xiàn),其實(shí)工廠函數(shù)基本上都是帶有返回對(duì)象的。而這些返回對(duì)象則是通過(guò)調(diào)用一種或者多種類來(lái)創(chuàng)建的對(duì)象。
例如,有如下代碼:
#!/usr/bin/python class Card: def __init__(self,rank,suit): self.suit = suit self.rank = rank self.hard,self.soft =self._points() classNumberCard(Card): def _points(self): returnint(self.rank),int(self.rank) classAceCard(Card): def _points(self): return 1,11 classFaceCard(Card): def _points(self): return 10,10 class Suit: def __init__(self,name,symbol): self.name = name self.symbol = symbol defcard(rank,suit): if rank == 1: return AceCard('A',suit) elif 2 <= rank < 11: return NumberCard(str(rank),suit) elif 11 <= rank < 14: name ={11:'J',12:'Q',13:'K'}[rank] return FaceCard(name,suit) else: raise Exception("Rank out ofrange")
上面代碼中的card其實(shí)就是通過(guò)調(diào)用各種類來(lái)創(chuàng)建對(duì)象,而這個(gè)函數(shù)就是一個(gè)工廠函數(shù)。這種函數(shù)的設(shè)計(jì),通常是為了滿足批量創(chuàng)建大量的對(duì)象或?qū)嵗鴦?chuàng)建。比如,創(chuàng)建所有的撲克牌對(duì)象可以通過(guò)如下代碼:
Club,Diamond,Heart,Spade=Suit('Club','CCC'),Suit('Diamond','DDD'),Suit('Heart','HHH'),Suit('Spade','SSS') deck =[card(rank,suit) for rank in range(1,14) for suit in(Club,Diamond,Heart,Spade)]
上面的代碼,首先創(chuàng)建了不同的花色,然后通過(guò)復(fù)合for語(yǔ)句創(chuàng)建了整套撲克牌。如果簡(jiǎn)化一些,自然也可以把花色存儲(chǔ)到一個(gè)專門的元組或者列表中增強(qiáng)一下可讀性。
以上是我自己通過(guò)不同的資料、文檔、書籍以及代碼示例總結(jié)出的Python中工廠函數(shù)的理解以及使用方式。應(yīng)該沒(méi)有太大偏差了吧?如果有的話,后續(xù)繼續(xù)糾正吧,畢竟學(xué)習(xí)本身應(yīng)該是一條曲折的路線。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python常見(jiàn)工廠函數(shù)用法示例
- 詳解Python中映射類型的內(nèi)建函數(shù)和工廠函數(shù)
- Python入門篇之函數(shù)
- Python內(nèi)置的字符串處理函數(shù)整理
- python 動(dòng)態(tài)獲取當(dāng)前運(yùn)行的類名和函數(shù)名的方法
- Python help()函數(shù)用法詳解
- python中的一些類型轉(zhuǎn)換函數(shù)小結(jié)
- Python def函數(shù)的定義、使用及參數(shù)傳遞實(shí)現(xiàn)代碼
- python進(jìn)階教程之函數(shù)參數(shù)的多種傳遞方法
相關(guān)文章
Python實(shí)現(xiàn)打磚塊小游戲代碼實(shí)例
這篇文章主要介紹了Python打磚塊小游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05python判斷單向鏈表是否包括環(huán),若包含則計(jì)算環(huán)入口的節(jié)點(diǎn)實(shí)例分析
這篇文章主要介紹了python判斷單向鏈表是否包括環(huán),若包含則計(jì)算環(huán)入口的節(jié)點(diǎn),結(jié)合實(shí)例形式分析了Python針對(duì)單向鏈表的遍歷、判斷相關(guān)算法原理與使用技巧,需要的朋友可以參考下2019-10-10Python繪制三角函數(shù)圖(sin\cos\tan)并標(biāo)注特定范圍的例子
今天小編就為大家分享一篇Python繪制三角函數(shù)圖(sin\cos\tan)并標(biāo)注特定范圍的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12在Python中使用MySQL--PyMySQL的基本使用方法
PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務(wù)器的一個(gè)庫(kù),Python2中則使用mysqldb。這篇文章主要介紹了在Python中使用MySQL--PyMySQL的基本使用,需要的朋友可以參考下2019-11-11opencv調(diào)整圖像亮度對(duì)比度的示例代碼
本文通過(guò)實(shí)例代碼給大家介紹了opencv調(diào)整圖像亮度對(duì)比度,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09JS設(shè)計(jì)模式之責(zé)任鏈模式實(shí)例詳解
這篇文章主要介紹了JS設(shè)計(jì)模式之責(zé)任鏈模式,結(jié)合實(shí)例形式詳細(xì)分析了責(zé)任鏈模式的概念、原理、功能、使用場(chǎng)景及相關(guān)操作技巧,需要的朋友可以參考下2018-02-02Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程
這篇文章主要介紹了Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python正則表達(dá)式實(shí)現(xiàn)自動(dòng)化編程
這篇文章主要介紹了python正則表達(dá)式實(shí)現(xiàn)自動(dòng)化編程,re模塊的compile()方法是構(gòu)成正則表達(dá)式的方法,向compile()傳入一個(gè)字符串表示正則表達(dá)式,該方法返回一個(gè)Regex模式的對(duì)象,需要的朋友可以參考下2023-01-01