inspect模块---检查活动对象
[inspect]模塊提供了一些有用的函數來幫助獲取有關活動對象(如模塊,類,方法,函數,跟蹤,框架對象和代碼對象)的信息。例如,它可以幫助您檢查類的內容,檢索方法的源代碼,提取和格式化函數的參數列表,或獲取顯示詳細追溯所需的所有信息。
這個模塊提供了四種主要的服務:
類型檢查,
獲取源代碼,
檢查類和函數,
以及檢查解釋器堆棧
一、type and members
第二個參數通常可以根據需要調用如下16個方法;
返回值為object的所有成員,以(name,value)對組成的列表
inspect.ismodule(object): 是否為模塊
inspect.isclass(object):是否為類
inspect.ismethod(object):是否為方法(bound method written in python)
inspect.isfunction(object):是否為函數(python function, including lambda expression)
inspect.isgeneratorfunction(object):是否為python生成器函數
inspect.isgenerator(object):是否為生成器
inspect.istraceback(object): 是否為traceback
inspect.isframe(object):是否為frame
inspect.iscode(object):是否為code
inspect.isbuiltin(object):是否為built-in函數或built-in方法
inspect.isroutine(object):是否為用戶自定義或者built-in函數或方法
inspect.isabstract(object):是否為抽象基類
inspect.ismethoddescriptor(object):是否為方法標識符
inspect.isdatadescriptor(object):是否為數字標識符,數字標識符有__get__ 和__set__屬性; 通常也有__name__和__doc__屬性
inspect.isgetsetdescriptor(object):是否為getset descriptor
inspect.ismemberdescriptor(object):是否為member descriptor
inspect的getmembers()方法可以獲取對象(module、class、method等)的如下屬性:
| module | doc | documentation string | |
| file | filename (missing for built-in modules) | ||
| class | doc | documentation string | |
| module | name of module in which this class was defined | ||
| method | doc | documentation string | |
| name | name with which this method was defined | ||
| im_class | class object that asked for this method | (1) | |
| im_func or func | function object containing implementation of method | ||
| im_self or self | instance to which this method is bound, or None | ||
| function | doc | documentation string | |
| name | name with which this function was defined | ||
| func_code | code object containing compiled function bytecode | ||
| func_defaults | tuple of any default values for arguments | ||
| func_doc | (same as doc) | ||
| func_globals | global namespace in which this function was defined | ||
| func_name | (same as name) | ||
| generator | iter | defined to support iteration over container | |
| close | raises new GeneratorExit exception inside the generator to terminate the iteration | ||
| gi_code | code object | ||
| gi_frame | frame object or possibly None once the generator has been exhausted | ||
| gi_running | set to 1 when generator is executing, 0 otherwise | ||
| next | return the next item from the container | ||
| send | resumes the generator and “sends” a value that becomes the result of the current yield-expression | ||
| throw | used to raise an exception inside the generator | ||
| traceback | tb_frame | frame object at this level | |
| tb_lasti | index of last attempted instruction in bytecode | ||
| tb_lineno | current line number in Python source code | ||
| tb_next | next inner traceback object (called by this level) | ||
| frame | f_back | next outer frame object (this frame’s caller) | |
| f_builtins | builtins namespace seen by this frame | ||
| f_code | code object being executed in this frame | ||
| f_exc_traceback | traceback if raised in this frame, or None | ||
| f_exc_type | exception type if raised in this frame, or None | ||
| f_exc_value | exception value if raised in this frame, or None | ||
| f_globals | global namespace seen by this frame | ||
| f_lasti | index of last attempted instruction in bytecode | ||
| f_lineno | current line number in Python source code | ||
| f_locals | local namespace seen by this frame | ||
| f_restricted | 0 or 1 if frame is in restricted execution mode | ||
| f_trace | tracing function for this frame, or None | ||
| code | co_argcount | number of arguments (not including * or ** args) | |
| co_code | string of raw compiled bytecode | ||
| co_consts | tuple of constants used in the bytecode | ||
| co_filename | name of file in which this code object was created | ||
| co_firstlineno | number of first line in Python source code | ||
| co_flags | bitmap: 1=optimized | 2=newlocals | 4=*arg |8=**arg | ||
| co_lnotab | encoded mapping of line numbers to bytecode indices | ||
| co_name | name with which this code object was defined | ||
| co_names | tuple of names of local variables | ||
| co_nlocals | number of local variables | ||
| co_stacksize | virtual machine stack space required | ||
| co_varnames | tuple of names of arguments and local variables | ||
| builtin | doc | documentation string | |
| name | original name of this function or method | ||
| self | instance to which a method is bound, or None |
name:模塊名(不包括其所在的package)
? suffix:
? mode:open()方法的模式,如:‘r’, 'a’等
? module_type: 整數,代表了模塊的類型
二、Retrieving source code
inspect.getdoc`(object): 獲取object的documentation信息
inspect.``getcomments`(object)
inspect.``getfile`(object): 返回對象的文件名
inspect.``getmodule(object):返回object所屬的模塊名
inspect.``getsourcefile(object): 返回object的python源文件名;object不能使built-in的module, class, mothod
inspect.``getsourcelines(object):返回object的python源文件代碼的內容,行號+代碼行
inspect.``getsource(object):以string形式返回object的源代碼
inspect.``cleandoc(doc):
三、class and functions
inspect.``getclasstree(classes[, unique])
inspect.``getargspec(func)
inspect.``getargvalues(frame)
inspect.``formatargspec(args[, varargs, varkw, defaults, formatarg, formatvarargs, formatvarkw, formatvalue, join])
inspect.``formatargvalues(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue, join])
inspect.``getmro(cls): 元組形式返回cls類的基類(包括cls類),以method resolution順序;通常cls類為元素的第一個元素
inspect.``getcallargs`(func[, *args][, **kwds]):將args和kwds參數到綁定到為func的參數名;對bound方法,也綁定第一個參數(通常為self)到相應的實例;返回字典,對應參數名及其值;
四、The interpreter stack
inspect.``getframeinfo(frame[, context])
inspect.``getouterframes(frame[, context])
inspect.``getinnerframes(traceback[, context])
inspect.``currentframe()
inspect.``stack([context])
inspect.``trace([context])
今天看RYU源碼時,發(fā)現一個inspect模塊,RYU使用了該模塊的getmembers函數來獲取ryu app的app類。
函數原型是 inspect.getmembers(object[, predicate])
功能: 從一個Object中獲取符合predicate的元素的list,元素的形式是(name,value)
predicate可以是ismodule(), isclass(), ismethod(), isfunction(), isgeneratorfunction(),
isgenerator(), istraceback(), isframe(), iscode(), isbuiltin(),isroutine(),這些驗證函數。
看一個例子
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import inspect class C():class CC():def foo3():print "foo3"def foo():print "foo"def foo2():print "foo2" cls = inspect.getmembers(C,inspect.ismethod) print cls總結
以上是生活随笔為你收集整理的inspect模块---检查活动对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python使用threading模块实
- 下一篇: Python的locals()函数