欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中g(shù)etattr函數(shù)和hasattr函數(shù)作用詳解

 更新時(shí)間:2016年06月14日 13:46:01   作者:百衲本  
這篇文章主要介紹了Python中g(shù)etattr函數(shù)和hasattr函數(shù)作用的相關(guān)知識(shí),非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下

hasattr(object, name)

作用:判斷對(duì)象object是否包含名為name的特性(hasattr是通過調(diào)用getattr(ojbect, name)是否拋出異常來實(shí)現(xiàn)的)。

示例:

>>> hasattr(list, 'append')
True >>> hasattr(list, 'add')
False 
getattr(object,name,default):

作用:返回object的名稱為name的屬性的屬性值,如果屬性name存在,則直接返回其屬性值;如果屬性name不存在,則觸發(fā)AttribetError異常或當(dāng)可選參數(shù)default定義時(shí)返回default值。

這個(gè)方法最主要的作用是實(shí)現(xiàn)反射機(jī)制。也就是說可以通過字符串獲取方法實(shí)例。這樣,你就可以把一個(gè)類可能要調(diào)用的方法放在配置文件里,在需要的時(shí)候動(dòng)態(tài)加載。

下面我們使用小例子來說明它們的用法:

import func_file #自定義python模塊
cs=input('請(qǐng)輸入要訪問的URL:')
if cs=='loggin':
func_file.loggin()
if cs =='home':
func_file.home()
if cs =='':
pass#以下省略 

當(dāng)我定義一個(gè)自定義模塊,去調(diào)用其中的方法的時(shí)候,使用if去判斷時(shí),如果模塊內(nèi)用很多方法,會(huì)大大影響開發(fā)的效率,代碼冗余差,顯然這是不可取的。下面我們使用hasattr()函數(shù)來實(shí)現(xiàn)我們的需求:

示例如下:

import func_file #自定義python模塊,需事先存在
def run():
while True:
cs=input('請(qǐng)輸入要訪問的URL:')
#hasattr利用字符串的形式去對(duì)象(模塊)中操作(尋找)成員
if hasattr(func_file,cs): #判斷用戶輸入的URL是否在func_file模塊中
func=getattr(func_file,cs) #有則將func_file模塊下的cs函數(shù)賦值 
func() #等同于執(zhí)行func_file模塊下的cs函數(shù)
else:
print('404')#定義錯(cuò)誤頁(yè)面
run() 

我們導(dǎo)入一個(gè)自定義模塊后,gatattr可以根據(jù)輸入的內(nèi)容動(dòng)態(tài)加載,利用hasattr()函數(shù)來判斷用戶輸入的是否存在,不存在則調(diào)用自定義方法。

是不是感覺和我們打開網(wǎng)址URL很類似啊!

上一個(gè)示例有一個(gè)問題,在實(shí)際情況中,我們的功能函數(shù)可能存放在很多模塊中,每一個(gè)都需要單獨(dú)導(dǎo)入,那我們可不可以利用getattr()函數(shù)去動(dòng)態(tài)加載模塊呢?當(dāng)然可以啦

請(qǐng)看示例:

def run():
while True:
cs=input('請(qǐng)輸入:')
v,k=cs.split('/') #獲得輸入的模塊和模塊的方法
obj=__import__('lib.'+v,fromlist=True) #調(diào)用lib目錄下的模塊fromlist=True按路徑連接的方式導(dǎo)入
if hasattr(obj,k):
f= getattr(obj,k)
f()
else:
print('404')
if __name__ == '__main__':
run() 

是不是感到getattr很強(qiáng)大啊。其實(shí),getattr()就是實(shí)現(xiàn)python反射的一塊積木,結(jié)合其它方法如setattr(),dir() 等,我們可以還可以做出很多有趣的事情。

相關(guān)文章

  • Python基于requests實(shí)現(xiàn)模擬上傳文件

    Python基于requests實(shí)現(xiàn)模擬上傳文件

    這篇文章主要介紹了Python基于requests實(shí)現(xiàn)模擬上傳文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python獲取網(wǎng)頁(yè)中所有圖片并篩選指定分辨率的方法

    python獲取網(wǎng)頁(yè)中所有圖片并篩選指定分辨率的方法

    下面小編就為大家分享一篇python獲取網(wǎng)頁(yè)中所有圖片并篩選指定分辨率的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Pytorch從0實(shí)現(xiàn)Transformer的實(shí)踐

    Pytorch從0實(shí)現(xiàn)Transformer的實(shí)踐

    本文主要介紹了Pytorch從0實(shí)現(xiàn)Transformer的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • wxPython事件驅(qū)動(dòng)實(shí)例詳解

    wxPython事件驅(qū)動(dòng)實(shí)例詳解

    這篇文章主要介紹了wxPython事件驅(qū)動(dòng)機(jī)制,以一個(gè)獲取當(dāng)前位置信息的實(shí)例形式講述了wxPython事件驅(qū)動(dòng)機(jī)制及其相關(guān)函數(shù)的用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • sklearn.metrics 中的f1-score簡(jiǎn)介

    sklearn.metrics 中的f1-score簡(jiǎn)介

    這篇文章主要介紹了sklearn.metrics 中的f1-score簡(jiǎn)介,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • OpenCV?基本圖形繪制函數(shù)詳解

    OpenCV?基本圖形繪制函數(shù)詳解

    這篇文章主要介紹了OpenCV?基本圖形繪制函數(shù),用于繪制圓的circle函數(shù),用于繪制填充的多邊形的fillPoly函數(shù),本文給大家提到好幾種,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • 解決pytorch-yolov3 train 報(bào)錯(cuò)的問題

    解決pytorch-yolov3 train 報(bào)錯(cuò)的問題

    今天小編就為大家分享一篇解決pytorch-yolov3 train 報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python如何繪制概率分布直方圖淺析

    Python如何繪制概率分布直方圖淺析

    項(xiàng)目中在前期經(jīng)常要看下數(shù)據(jù)的分布情況,這對(duì)于探究數(shù)據(jù)規(guī)律非常有用,概率分布表示樣本數(shù)據(jù)的模樣,使用Python繪制頻率分布直方圖非常簡(jiǎn)潔,因?yàn)橛玫念l次非常高,這篇文章主要給大家介紹了關(guān)于Python如何繪制概率分布直方圖的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • 對(duì)pandas中iloc,loc取數(shù)據(jù)差別及按條件取值的方法詳解

    對(duì)pandas中iloc,loc取數(shù)據(jù)差別及按條件取值的方法詳解

    今天小編就為大家分享一篇對(duì)pandas中iloc,loc取數(shù)據(jù)差別及按條件取值的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python中單線程、多線程和多進(jìn)程的效率對(duì)比實(shí)驗(yàn)實(shí)例

    Python中單線程、多線程和多進(jìn)程的效率對(duì)比實(shí)驗(yàn)實(shí)例

    這篇文章主要介紹了Python單線程多線程和多進(jìn)程效率對(duì)比,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論