亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中的單例模式與反射機制詳解

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

單例模式

一般情況下,類可以生成任意個實例,而單例模式只生成一個實例

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

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

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

然后我們來驗證下,單例模式下是否只能生成一個實例

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

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

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

反射

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

我們以一個飯店點菜的實際場景來理解Python的反射機制

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

hasatter

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

判斷對象中是否有某個屬性或某個方法,返回值是布爾型

guke1 = Food_list()#實例化一個顧客對象
while True:
    diancai = input('請點菜:  ')
    if hasattr(guke1,diancai):#判斷顧客點的菜有沒有
        print('好的,馬上去做')
        break
    else:
        print('這個沒有,換個別的吧')
>>>請點菜:  佛跳墻
>>>這個沒有,換個別的吧
>>>請點菜:  yxrs
>>>好的,馬上去做

getattr

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

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

setattr

setattr(對象,屬性,新值)

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

我們給實例guke1加個價格屬性

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

總結(jié)

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

相關(guān)文章

  • 基于Python實現(xiàn)圖像文字識別OCR工具

    基于Python實現(xiàn)圖像文字識別OCR工具

    在工作、生活中常常會用到,比如票據(jù)、漫畫、掃描件、照片的文本提取。本文主要介紹了基于PyQt + PaddleOCR實現(xiàn)的一個桌面端的OCR工具,用于快速實現(xiàn)圖片中文本區(qū)域自動檢測+文本自動識別,需要的朋友可以參考一下
    2021-12-12
  • Python使用Tkinter制作一個進制轉(zhuǎn)換工具

    Python使用Tkinter制作一個進制轉(zhuǎn)換工具

    在平時工作學(xué)習(xí)當(dāng)中,我們經(jīng)常會編寫一些簡單的 Python GUI 工具,以此來完成各種各樣的自動化任務(wù),下面我們就來看看如何使用Python制作一個進制轉(zhuǎn)換工具吧
    2024-01-01
  • Python操作json的方法實例分析

    Python操作json的方法實例分析

    這篇文章主要介紹了Python操作json的方法,結(jié)合實例形式簡單分析了Python針對json數(shù)據(jù)使用解碼loads()和編碼dumps()相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • 使用Python的Dataframe取兩列時間值相差一年的所有行方法

    使用Python的Dataframe取兩列時間值相差一年的所有行方法

    今天小編就為大家分享一篇使用Python的Dataframe取兩列時間值相差一年的所有行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 一文詳述 Python 中的 property 語法

    一文詳述 Python 中的 property 語法

    這篇文章主要介紹了一文詳述 Python 中的 property 語法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • python目標檢測給圖畫框,bbox畫到圖上并保存案例

    python目標檢測給圖畫框,bbox畫到圖上并保存案例

    這篇文章主要介紹了python目標檢測給圖畫框,bbox畫到圖上并保存案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python 格式化輸出百分號的方法

    python 格式化輸出百分號的方法

    今天小編就為大家分享一篇python 格式化輸出百分號的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • django 自定義過濾器的實現(xiàn)

    django 自定義過濾器的實現(xiàn)

    這篇文章主要介紹了django 自定義過濾器的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 利用Python自制網(wǎng)頁并實現(xiàn)一鍵自動生成探索性數(shù)據(jù)分析報告

    利用Python自制網(wǎng)頁并實現(xiàn)一鍵自動生成探索性數(shù)據(jù)分析報告

    這篇文章主要介紹了利用Python自制了網(wǎng)頁并實現(xiàn)一鍵自動生成探索性數(shù)據(jù)分析報告,文章內(nèi)容具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Python中使用defaultdict和Counter的方法

    Python中使用defaultdict和Counter的方法

    本文深入探討了Python中的兩個強大工具——defaultdict和Counter,并詳細介紹了它們的工作原理、應(yīng)用場景以及在實際編程中的高效使用方法,感興趣的朋友跟隨小編一起看看吧
    2025-01-01

最新評論