最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的單例模式與反射機(jī)制詳解

 更新時(shí)間:2021年11月29日 15:02:54   作者:zp_cyy  
這篇文章主要為大家介紹了Python中的單例模式與反射機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

單例模式

一般情況下,類可以生成任意個(gè)實(shí)例,而單例模式只生成一個(gè)實(shí)例

我們先用單例模式設(shè)計(jì)一個(gè)Rectangle類

然后用__new__方法設(shè)計(jì)單例模式,代碼如下

class Rectangle:
    def __init__(self,length,width):
        self.length=length
        self.width=width
    def __new__(cls, *args, **kwargs):#__new__至少要有一個(gè)參數(shù)cls,代表要實(shí)例化的類
        if not hasattr(cls,'obj'):  #判斷類當(dāng)中有沒(méi)有實(shí)例,如果沒(méi)有則新建
            cls.obj=object.__new__(cls)  #生成實(shí)例對(duì)象
        return cls.obj

然后我們來(lái)驗(yàn)證下,單例模式下是否只能生成一個(gè)實(shí)例

rec1 = Rectangle(10,8)#判斷類中沒(méi)有實(shí)例,則新建實(shí)例rec1
print(rec1.length,rec1.width)#這時(shí)候我們打印下rec1這個(gè)長(zhǎng)方形的長(zhǎng)和寬
>>>10 8#是我們輸入的值
rec2 = Rectangle(6,4)
#Rectangle已經(jīng)創(chuàng)建過(guò)rec1實(shí)例了,所以不會(huì)再生成新的實(shí)例,此時(shí)的rec1和rec2指向是同一個(gè)對(duì)象:Rectangle(6,4)
print(rec1.length,rec1.width)#打印下rec1的長(zhǎng)和寬
print(rec2.length,rec2.width)#打印下rec2的長(zhǎng)和寬
>>>
6 4 
6 4 
print(id(rec1)==id(rec2))
>>>Ture #對(duì)象/實(shí)例只有一個(gè),只是賦給了不同的變量名

單例模式在程序設(shè)計(jì)中比較典型的應(yīng)用場(chǎng)景:多個(gè)用戶同時(shí)調(diào)用某個(gè)模塊時(shí),會(huì)生成一些日志,我們希望這些日志存在同一個(gè)文件內(nèi),而不是多個(gè)文件。

在生成日志模塊我們就可以采用單例模式進(jìn)行設(shè)計(jì)。

反射

概念:簡(jiǎn)單來(lái)說(shuō)就是可以利用字符串來(lái)映射模塊中的相應(yīng)方法然后可以操作模塊中相應(yīng)的方法

我們以一個(gè)飯店點(diǎn)菜的實(shí)際場(chǎng)景來(lái)理解Python的反射機(jī)制

class Food_list:#創(chuàng)建一個(gè)飯店菜單的類
    def yxrs(self):
        return '魚(yú)香肉絲'
    def gbjd(self):
        return '宮保雞丁'
    def hspg(self):
        return '紅燒排骨'

hasatter

hasatter(對(duì)象,屬性或方法名)

判斷對(duì)象中是否有某個(gè)屬性或某個(gè)方法,返回值是布爾型

guke1 = Food_list()#實(shí)例化一個(gè)顧客對(duì)象
while True:
    diancai = input('請(qǐng)點(diǎn)菜:  ')
    if hasattr(guke1,diancai):#判斷顧客點(diǎn)的菜有沒(méi)有
        print('好的,馬上去做')
        break
    else:
        print('這個(gè)沒(méi)有,換個(gè)別的吧')
>>>請(qǐng)點(diǎn)菜:  佛跳墻
>>>這個(gè)沒(méi)有,換個(gè)別的吧
>>>請(qǐng)點(diǎn)菜:  yxrs
>>>好的,馬上去做

getattr

getattr(對(duì)象,屬性或方法名,缺省值) 判斷對(duì)象中是否有某個(gè)屬性或某個(gè)方法,如果有返回方法本身,沒(méi)有則返回缺省值

guke1 = Food_list()#實(shí)例化一個(gè)顧客對(duì)象
def fun1():#定義一個(gè)方法,用作getattr的缺省值
    return '沒(méi)有這道菜'
foodname = input('請(qǐng)輸入要翻譯的菜名:')
a = getattr(guke1,foodname,fun1)
#判斷guke1中有沒(méi)有foodname方法,有則返回這個(gè)方法,沒(méi)有則返回fun1方法
print(a())#執(zhí)行返回的方法
>>>請(qǐng)輸入要翻譯的菜名:yxrs#guke1中有yxrs方法,則返回這個(gè)方法
>>>魚(yú)香肉絲
>>>請(qǐng)輸入要翻譯的菜名:dsfsfs#guke1中有沒(méi)有dsfsfs方法,則返回fun1方法
>>>沒(méi)有這道菜

setattr

setattr(對(duì)象,屬性,新值)

將實(shí)例的屬性改為新的值,如果屬性不存在則新建

我們給實(shí)例guke1加個(gè)價(jià)格屬性

guke1 = Food_list()#實(shí)例化一個(gè)顧客對(duì)象
setattr(guke1,'proce','23元')
print(guke1.proce)
>>>
23元

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • python使用pipeline批量讀寫(xiě)redis的方法

    python使用pipeline批量讀寫(xiě)redis的方法

    今天小編就為大家分享一篇python使用pipeline批量讀寫(xiě)redis的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python 繪制可視化折線圖

    Python 繪制可視化折線圖

    這篇文章主要介紹了Python 繪制可視化折線圖的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python搭建HTTP服務(wù)過(guò)程圖解

    Python搭建HTTP服務(wù)過(guò)程圖解

    這篇文章主要介紹了Python搭建HTTP服務(wù)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python實(shí)現(xiàn)計(jì)數(shù)排序與桶排序?qū)嵗a

    python實(shí)現(xiàn)計(jì)數(shù)排序與桶排序?qū)嵗a

    這篇文章主要介紹了python計(jì)數(shù)排序與桶排序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python中的a=value1 or value2詳解

    Python中的a=value1 or value2詳解

    Python中的`a=valueor0`是一種簡(jiǎn)潔的方式來(lái)為變量提供默認(rèn)值,利用了Python的布爾上下文和短路求值機(jī)制,如果`value`是“真值”,則`a`被賦值為`value`;如果`value`是“假值”,則`a`被賦值為0
    2024-12-12
  • Python中新式類與經(jīng)典類的區(qū)別詳析

    Python中新式類與經(jīng)典類的區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于Python中新式類與經(jīng)典類的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python使用Spire.XLS輕松設(shè)置Excel表格的行高與列寬

    Python使用Spire.XLS輕松設(shè)置Excel表格的行高與列寬

    在處理 Excel 電子表格時(shí),合理設(shè)置行高和列寬是確保數(shù)據(jù)清晰可讀的關(guān)鍵步驟,本文將介紹如何使用 Python 和 Spire.XLS 庫(kù)來(lái)精確控制 Excel 工作表的行高和列寬,感興趣的小伙伴跟隨小編一起學(xué)習(xí)一下
    2026-04-04
  • PyTorch搭建CNN實(shí)現(xiàn)風(fēng)速預(yù)測(cè)

    PyTorch搭建CNN實(shí)現(xiàn)風(fēng)速預(yù)測(cè)

    PyTorch是一個(gè)開(kāi)源的Python機(jī)器學(xué)習(xí)庫(kù),基于Torch,用于自然語(yǔ)言處理等應(yīng)用程序。它不僅能夠?qū)崿F(xiàn)強(qiáng)大的GPU加速,同時(shí)還支持動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)。本文將介紹PyTorch搭建CNN如何實(shí)現(xiàn)風(fēng)速預(yù)測(cè),感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • Python json序列化解讀

    Python json序列化解讀

    這篇文章主要介紹了Python json序列化解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Pycharm中available package不顯示包問(wèn)題及解決過(guò)程

    Pycharm中available package不顯示包問(wèn)題及解決過(guò)程

    文章主要描述了在PyCharm中安裝包時(shí)遇到available package未顯示的問(wèn)題,通過(guò)取消勾選Anaconda圖標(biāo),再點(diǎn)擊“+”后問(wèn)題得到解決
    2026-04-04

最新評(píng)論

洛南县| 蒲城县| 吉林省| 钟祥市| 苍梧县| 桐梓县| 利辛县| 潼关县| 禄丰县| 西乡县| 怀集县| 东阿县| 嘉义县| 邵阳市| 朝阳县| 攀枝花市| 宣武区| 股票| 平南县| 肥乡县| 巴彦淖尔市| 确山县| 科技| 玛沁县| 蒙山县| 陕西省| 黄陵县| 乌兰浩特市| 青龙| 革吉县| 泸西县| 涿鹿县| 元阳县| 衡东县| 大田县| 柘荣县| 依兰县| 栖霞市| 临江市| 潮安县| 绥棱县|