溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python工廠函數(shù)用法實(shí)例分析

發(fā)布時(shí)間:2020-09-05 09:16:17 來(lái)源:腳本之家 閱讀:242 作者:grey_csdn 欄目:開(kāi)發(fā)技術(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ì)有所幫助。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI