Python工廠函數(shù)用法實例分析
本文實例講述了Python工廠函數(shù)用法。分享給大家供大家參考,具體如下:
參考了很多代碼、別人的文章以及書籍,最后自己做了適合自己理解的一種理解總結(jié)方式。
很多人說,工廠函數(shù)看上去像函數(shù),其實是類。我覺得這種方法有些牽強,雖說在OOP中Python有其自己對類以及對象的定義。在一定程度上這么說是可以的。
我個人的理解,既然叫做工廠函數(shù),那么這一定是一個函數(shù)。不過,看了許多例子后發(fā)現(xiàn),其實工廠函數(shù)基本上都是帶有返回對象的。而這些返回對象則是通過調(diào)用一種或者多種類來創(chuàng)建的對象。
例如,有如下代碼:
#!/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其實就是通過調(diào)用各種類來創(chuàng)建對象,而這個函數(shù)就是一個工廠函數(shù)。這種函數(shù)的設(shè)計,通常是為了滿足批量創(chuàng)建大量的對象或?qū)嵗鴦?chuàng)建。比如,創(chuàng)建所有的撲克牌對象可以通過如下代碼:
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)建了不同的花色,然后通過復(fù)合for語句創(chuàng)建了整套撲克牌。如果簡化一些,自然也可以把花色存儲到一個專門的元組或者列表中增強一下可讀性。
以上是我自己通過不同的資料、文檔、書籍以及代碼示例總結(jié)出的Python中工廠函數(shù)的理解以及使用方式。應(yīng)該沒有太大偏差了吧?如果有的話,后續(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īng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
python 實現(xiàn)仿微信聊天時間格式化顯示的代碼
這篇文章主要介紹了python 實現(xiàn)仿微信聊天時間格式化顯示,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-04-04
pytorch如何使用Imagenet預(yù)訓(xùn)練模型訓(xùn)練
這篇文章主要介紹了pytorch如何使用Imagenet預(yù)訓(xùn)練模型訓(xùn)練問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)找到最大或最小的N個元素實現(xiàn)方法示例
這篇文章主要介紹了Python找到最大或最小的N個元素實現(xiàn)方法,涉及Python基于heapq模塊進行集合運算的相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置(場景示例)
這篇文章主要介紹了python3 使用OpenCV計算滑塊拼圖驗證碼缺口位置,本文通過場景示例給大家詳細介紹,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
深度學(xué)習(xí)環(huán)境搭建anaconda+pycharm+pytorch的方法步驟
本文主要介紹了深度學(xué)習(xí)環(huán)境搭建anaconda+pycharm+pytorch的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09

