python之使用inspect模塊
inspect模塊提供了一系列函數(shù)用于幫助使用自省。下面僅列出較常用的一些函數(shù),想獲得全部的函數(shù)資料可以查看inspect模塊的文檔。
1.檢查對象類型
is{module|class|function|method|builtin}(obj):
檢查對象是否為模塊、類、函數(shù)、方法、內(nèi)建函數(shù)或方法。
isroutine(obj):
用于檢查對象是否為函數(shù)、方法、內(nèi)建函數(shù)或方法等等可調(diào)用類型。用這個方法會比多個is*()更方便,不過它的實(shí)現(xiàn)仍然是用了多個is*()。
im=cat.sayHi
ifinspect.isroutine(im):
im()
對于實(shí)現(xiàn)了__call__的類實(shí)例,這個方法會返回False。如果目的是只要可以直接調(diào)用就需要是True的話,不妨使用isinstance(obj,collections.Callable)這種形式。我也不知道為什么Callable會在collections模塊中,抱歉!我猜大概是因?yàn)閏ollections模塊中包含了很多其他的ABC(AbstractBaseClass)的緣故吧:)
2.獲取對象信息
getmembers(object[,predicate]):
這個方法是dir()的擴(kuò)展版,它會將dir()找到的名字對應(yīng)的屬性一并返回,形如[(name,value),...]。另外,predicate是一個方法的引用,如果指定,則應(yīng)當(dāng)接受value作為參數(shù)并返回一個布爾值,如果為False,相應(yīng)的屬性將不會返回。使用is*作為第二個參數(shù)可以過濾出指定類型的屬性。
getmodule(object):
還在為第2節(jié)中的__module__屬性只返回字符串而遺憾嗎?這個方法一定可以滿足你,它返回object的定義所在的模塊對象。
get{file|sourcefile}(object):
獲取object的定義所在的模塊的文件名|源代碼文件名(如果沒有則返回None)。用于內(nèi)建的對象(內(nèi)建模塊、類、函數(shù)、方法)上時會拋出TypeError異常。
get{source|sourcelines}(object):
獲取object的定義的源代碼,以字符串|字符串列表返回。代碼無法訪問時會拋出IOError異常。只能用于module/class/function/method/code/frame/traceack對象。
getargspec(func):
僅用于方法,獲取方法聲明的參數(shù),返回元組,分別是(普通參數(shù)名的列表,*參數(shù)名,**參數(shù)名,默認(rèn)值元組)。如果沒有值,將是空列表和3個None。如果是2.6以上版本,將返回一個命名元組(NamedTuple),即除了索引外還可以使用屬性名訪問元組中的元素。
defadd(x,y=1,*z):
returnx+y+sum(z)
printinspect.getargspec(add)
#ArgSpec(args=['x','y'],varargs='z',keywords=None,defaults=(1,))
getargvalues(frame):
僅用于棧幀,獲取棧幀中保存的該次函數(shù)調(diào)用的參數(shù)值,返回元組,分別是(普通參數(shù)名的列表,*參數(shù)名,**參數(shù)名,幀的locals())。如果是2.6以上版本,將返回一個命名元組(NamedTuple),即除了索引外還可以使用屬性名訪問元組中的元素。
defadd(x,y=1,*z):
printinspect.getargvalues(inspect.currentframe())
returnx+y+sum(z)
add(2)
#ArgInfo(args=['x','y'],varargs='z',keywords=None,locals={'y':1,'x':2,'z':()})
getcallargs(func[,*args][,**kwds]):
返回使用args和kwds調(diào)用該方法時各參數(shù)對應(yīng)的值的字典。這個方法僅在2.7版本中才有。
getmro(cls):
返回一個類型元組,查找類屬性時按照這個元組中的順序。如果是新式類,與cls.__mro__結(jié)果一樣。但舊式類沒有__mro__這個屬性,直接使用這個屬性會報(bào)異常,所以這個方法還是有它的價值的。
printinspect.getmro(Cat)
#(,)
printCat.__mro__
#(,)
classDog:pass
printinspect.getmro(Dog)
#(,)
printDog.__mro__#AttributeError
currentframe():
返回當(dāng)前的棧幀對象。
以上內(nèi)容為大家介紹了python之使用inspect模塊,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

猜你喜歡LIKE
相關(guān)推薦HOT
更多>>
python中的filter函數(shù)功能是什么?
python中的filter函數(shù)功能是什么?在python中,面對眾多的數(shù)據(jù),我們要過濾篩選出我們需要的數(shù)據(jù)。python中的filter函數(shù)就是起到了過濾篩選的作...詳情>>
2023-11-10 20:37:27
pythontime模塊是什么
pythontime模塊是什么在python中使用時間,就免不了和time模塊打交道,另外兩個模塊這個暫時先不做介紹。做time模塊的使用上,我們可以用它來對...詳情>>
2023-11-10 15:53:16
python是什么編程語言
python是什么編程語言1、說明是一種面向?qū)ο蟆⒔忉屝陀?jì)算機(jī)程序設(shè)計(jì)語言,由GuidovanRossum于1989年底發(fā)明,第一個公開發(fā)行版發(fā)行于1991年。Pyt...詳情>>
2023-11-10 15:21:05
python異常處理的兩種技巧
python異常處理的兩種技巧1、傳遞異常有時我們會在捕捉到一個異常后重新引發(fā)它(傳遞異常),實(shí)現(xiàn)起來很簡單,使用不帶參數(shù)的raise語句即可。deff...詳情>>
2023-11-10 14:49:39熱門推薦
python中的filter函數(shù)功能是什么?
沸python delattr函數(shù)如何使用?
熱python中pdb模塊怎么用?
熱Python如何截圖保存?
新python?中缺少module怎么辦?
python strftime和strptime的不同分析
python time.strptime的格式化
python中@contextmanager是什么?
python對象的三要素是什么
pythonGIL在Python多線程的應(yīng)用
python如何對多個CSV文件進(jìn)行讀取
pythonif嵌套命令如何理解?
python對列表進(jìn)行永久性或臨時排序的方法
python生成器調(diào)用方法引發(fā)異常
技術(shù)干貨







快速通道 更多>>
-
課程介紹
點(diǎn)擊獲取大綱 -
就業(yè)前景
查看就業(yè)薪資 -
學(xué)習(xí)費(fèi)用
了解課程價格 -
優(yōu)惠活動
領(lǐng)取優(yōu)惠券 -
學(xué)習(xí)資源
領(lǐng)3000G教程 -
師資團(tuán)隊(duì)
了解師資團(tuán)隊(duì) -
實(shí)戰(zhàn)項(xiàng)目
獲取項(xiàng)目源碼 -
開班地區(qū)
查看來校路線