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

Python強(qiáng)大的自省機(jī)制詳解

 更新時(shí)間:2021年11月25日 17:20:36   作者:程序員-夏天  
這篇文章主要為大家介紹了Python強(qiáng)大的自省機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

何為自省

在計(jì)算機(jī)編程領(lǐng)域里,自省是一種能力,是通過一定機(jī)制在程序運(yùn)行時(shí)獲知對象的類型及對象的內(nèi)部結(jié)構(gòu),Python的自省能力還是很強(qiáng)大的,因?yàn)镻ython中一切皆對象,我們不僅可以獲取對象的類型,還可以獲取對象內(nèi)部的屬性。下面就來介紹一下Python中一些提供強(qiáng)大自省能力的方法。

dir()函數(shù)

它是用于自省的最重要的函數(shù)之一。它以列表的形式返回一個(gè)對象所擁有的全部屬性和方法,如果dir()不傳任何參數(shù),默認(rèn)是查找當(dāng)前命名空間有什么對象。

user = {"nickname": "tigeriaf", "level": 2}
print(dir(user))

執(zhí)行結(jié)果為:

上面的dir()自省輸出了一個(gè)字典對象的所有方法的名字。當(dāng)我們記不太清某個(gè)對象的某個(gè)方法的名字時(shí),使用這個(gè)是非常有幫助的。

type()函數(shù)和id()函數(shù)

type()函數(shù)返回一個(gè)對象的類型。例如:

print(type('tigeriaf'))
# 結(jié)果輸出為 <class 'str'>
print(type(2))
# 結(jié)果輸出為 <class 'int'>
print(type([1, 2, 3]))
# 結(jié)果輸出為 <class 'list'>

id()函數(shù)返回對象的唯一標(biāo)識符,是一個(gè)整數(shù),在CPython中id()函數(shù)用于獲取對象的內(nèi)存地址。例如:

print(id('tigeriaf')) 

# 結(jié)果輸出為 51064768

inspect模塊

inspect是Python的標(biāo)準(zhǔn)庫,提供了更加強(qiáng)大的自省能力,提供了很多函數(shù)幫助獲取對象的信息,例如模塊、類、方法、函數(shù)、回溯、幀對象以及代碼對象。
該模塊提供了4種主要的功能:類型檢查、獲取源代碼、檢查類與函數(shù)、檢查解釋器的調(diào)用堆棧。下面介紹一下其中的幾個(gè)常用的方法:

getmembers(object, predicate=None)函數(shù)

是基于dir()實(shí)現(xiàn)的,返回一個(gè)包含對象的所有成員的(name, value)列表。返回的內(nèi)容比對象的__dict__包含的內(nèi)容多。predicate是可選的參數(shù),被此函數(shù)判斷為True的成員才被返回。

例如:

import inspect
print(inspect.getmembers(list))

signature(obj, *, follow_wrapped=True)函數(shù)

將返回一個(gè)inspect.Signature類型的對象,值為這個(gè)函數(shù)的所有參數(shù)。

getmodule(object)函數(shù)

返回定義對象的模塊。

getsource(object)函數(shù)

返回對象的源代碼。

getsourcelines(object)函數(shù)

返回一個(gè)元組,元組第一項(xiàng)為對象源代碼行的列表,第二項(xiàng)是第一行源代碼的行號。 例如:

import inspect
def test(a: int):
    print(a)
print(inspect.signature(test))
print(inspect.getmodule(test))
print(inspect.getsource(test))
print(inspect.getsourcelines(test))

執(zhí)行結(jié)果如下:

image.png

ismodule()、isclass()、ismethod()、isfunction()、isgenerator()函數(shù)等等

一系列判斷對象類型的方法,大都是封裝了isinstance(object, types.FunctionType)之類語句的函數(shù)。

如果平時(shí)的開發(fā)中對模塊、類的操作比較多,那么inspect模塊一定要學(xué)習(xí)一下。

hasattr()函數(shù)和getattr()函數(shù)

dir()函數(shù)會返回某個(gè)對象所有屬性的列表,但是如果只想測試一個(gè)或多個(gè)屬性是否存在,就需要hasattr()函數(shù)和 getattr()函數(shù)來完成了,它們的功能分別為判斷對象是否有某個(gè)屬性、獲得某個(gè)屬性值。 例如:

class MyObj:
    def __init__(self):
        self.name = 'my_obj'
        self.a = 1
        self.b = [1, 2, 3]
myobj = MyObj()
print(getattr(myobj, "name"))
print(getattr(myobj, "b"))
print(hasattr(myobj, "a"))
print(hasattr(myobj, "c"))

執(zhí)行結(jié)果為:

image.png

總結(jié)

其實(shí)Python對自省有著很大的支持,Python中還有很多這里沒提到的其他方法也能有助于自省,有興趣的話,你會慢慢發(fā)現(xiàn)它們的。

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

相關(guān)文章

  • Python Numpy庫安裝與基本操作示例

    Python Numpy庫安裝與基本操作示例

    這篇文章主要介紹了Python Numpy庫安裝與基本操作,簡單介紹了Numpy庫的基本功能、并結(jié)合實(shí)例形式分析了基于Numpy庫的數(shù)組與矩陣相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Selenium鼠標(biāo)與鍵盤事件常用操作方法示例

    Selenium鼠標(biāo)與鍵盤事件常用操作方法示例

    這篇文章主要介紹了Selenium鼠標(biāo)與鍵盤事件常用操作方法,結(jié)合實(shí)例形式分析了Selenium鼠標(biāo)事件與鍵盤事件常見方法與相關(guān)使用技巧,需要的朋友可以參考下
    2018-08-08
  • python 與服務(wù)器的共享文件夾交互方法

    python 與服務(wù)器的共享文件夾交互方法

    今天小編就為大家分享一篇python 與服務(wù)器的共享文件夾交互方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python 常用的異步框架匯總整理

    python 常用的異步框架匯總整理

    自從python3推出關(guān)于異步編程的新語法之后,關(guān)于異步web框架也是如雨后春筍一般爆發(fā),關(guān)于 異步框架的性能也日漸激烈。今天就整理關(guān)于 python 的異步框架。
    2021-06-06
  • 用python畫一只帥氣的皮卡丘

    用python畫一只帥氣的皮卡丘

    大家好,本篇文章主要講的是用python畫一只帥氣的皮卡丘,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • python隨機(jī)生成庫faker庫api實(shí)例詳解

    python隨機(jī)生成庫faker庫api實(shí)例詳解

    今天小編就為大家分享一篇python隨機(jī)生成庫faker庫api實(shí)例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python基于staticmethod裝飾器標(biāo)示靜態(tài)方法

    Python基于staticmethod裝飾器標(biāo)示靜態(tài)方法

    這篇文章主要介紹了Python基于staticmethod裝飾器標(biāo)示靜態(tài)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python調(diào)用并鏈接MATLAB腳本詳解

    python調(diào)用并鏈接MATLAB腳本詳解

    這篇文章主要介紹了python調(diào)用并鏈接MATLAB腳本詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python處理日期和時(shí)間的方法總結(jié)

    Python處理日期和時(shí)間的方法總結(jié)

    這篇文章主要介紹了Python時(shí)間和日期的處理方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • 解決Pymongo insert時(shí)會自動添加_id的問題

    解決Pymongo insert時(shí)會自動添加_id的問題

    這篇文章主要介紹了解決Pymongo insert時(shí)會自動添加_id的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論