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

Python強大的自省機制詳解

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

何為自省

在計算機編程領域里,自省是一種能力,是通過一定機制在程序運行時獲知對象的類型及對象的內部結構,Python的自省能力還是很強大的,因為Python中一切皆對象,我們不僅可以獲取對象的類型,還可以獲取對象內部的屬性。下面就來介紹一下Python中一些提供強大自省能力的方法。

dir()函數(shù)

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

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

執(zhí)行結果為:

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

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

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

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

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

print(id('tigeriaf')) 

# 結果輸出為 51064768

inspect模塊

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

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

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

例如:

import inspect
print(inspect.getmembers(list))

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

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

getmodule(object)函數(shù)

返回定義對象的模塊。

getsource(object)函數(shù)

返回對象的源代碼。

getsourcelines(object)函數(shù)

返回一個元組,元組第一項為對象源代碼行的列表,第二項是第一行源代碼的行號。 例如:

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í)行結果如下:

image.png

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

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

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

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

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

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í)行結果為:

image.png

總結

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

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

相關文章

  • 使用Python開發(fā)一個圖像標注與OCR識別工具

    使用Python開發(fā)一個圖像標注與OCR識別工具

    這篇文章主要介紹了一個使用Python開發(fā)的工具,允許用戶在圖像上進行矩形標注,使用 OCR 對標注區(qū)域進行文本識別,并將結果保存為 Excel 文件,感興趣的可以了解下
    2025-03-03
  • Python實現(xiàn)讀取Properties配置文件的方法

    Python實現(xiàn)讀取Properties配置文件的方法

    這篇文章主要介紹了Python實現(xiàn)讀取Properties配置文件的方法,結合實例形式分析了Python讀取Properties配置文件類的定義與使用相關操作技巧,需要的朋友可以參考下
    2018-03-03
  • python常用的正則表達式大全

    python常用的正則表達式大全

    正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配,下面這篇文章主要給大家介紹了關于python常用正則表達式的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • 解決編碼問題:UnicodeDecodeError: 'utf-8' codec can't decod

    解決編碼問題:UnicodeDecodeError: 'utf-8' codec

    這篇文章主要介紹了快速解決編碼問題:UnicodeDecodeError: 'utf-8' codec can't decod,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 利用Python實現(xiàn)生成顏色表(color chart)

    利用Python實現(xiàn)生成顏色表(color chart)

    在做色彩相關的算法分析時候,經(jīng)常需要使用規(guī)則的顏色表來進行輔助,本文就來利用numpy和opencv生成顏色表并保存為圖片,需要的可以參考一下
    2023-05-05
  • python 貪心算法的實現(xiàn)

    python 貪心算法的實現(xiàn)

    這篇文章主要介紹了python 貪心算法的實現(xiàn),幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-09-09
  • Python中的單下劃線和雙下劃線使用場景詳解

    Python中的單下劃線和雙下劃線使用場景詳解

    這篇文章主要介紹了Python中的單下劃線和雙下劃線使用場景詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • pandas 相關性和正態(tài)性分析的實踐

    pandas 相關性和正態(tài)性分析的實踐

    當我們談論正態(tài)性(Normality)和相關性(Correlation)時,我們實際上在嘗試理解數(shù)據(jù)的分布模式和不同變量之間的關系,本文就來介紹一下pandas 相關性和正態(tài)性的實踐,感興趣的可以了解一下
    2024-07-07
  • python中parser.add_argument()用法實例(命令行選項、參數(shù)和子命令解析器)

    python中parser.add_argument()用法實例(命令行選項、參數(shù)和子命令解析器)

    最近開始讀論文代碼了,遇到一個名字叫option的py文件,打開一看清一色的parser.add_argument(),看得是一臉懵逼,這篇文章主要給大家介紹了關于python中parser.add_argument()用法的相關資料,需要的朋友可以參考下
    2022-03-03
  • Python使用pandas實現(xiàn)對數(shù)據(jù)進行特定排序

    Python使用pandas實現(xiàn)對數(shù)據(jù)進行特定排序

    在數(shù)據(jù)分析和處理過程中,排序是一項常見而重要的操作,本文將詳細介紹如何利用pandas對數(shù)據(jù)進行特定排序,包括基本排序、多列排序、自定義排序規(guī)則等方面的內容,需要的可以了解下
    2024-03-03

最新評論

体育| 西林县| 惠水县| 徐汇区| 兴山县| 独山县| 临西县| 黑河市| 松原市| 娱乐| 盘山县| 张北县| 岚皋县| 江北区| 广平县| 通江县| 太康县| 深州市| 大关县| 东明县| 木里| 隆林| 峨山| 五峰| 河北区| 叙永县| 延安市| 盐边县| 富顺县| 章丘市| 横山县| 额济纳旗| 乌拉特中旗| 湘西| 林口县| 韶山市| 图木舒克市| 惠来县| 玉屏| 金山区| 南康市|