Python_inspect的使用

The inspect module provides several useful functions to help get information about live objects such as modules, classes, methods, functions, tracebacks, frame objects, and code objects.

這個模塊是針對模塊,類,方法,功能等對象提供些有用的方法。

 

inspect模塊的getargspec()方法正是用此判斷來獲取函數的特殊參數的。現在可以方便的獲取__init__的**參數了:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import inspect

def attr_from_locals(locals_dict):

 self = locals_dict.pop('self')

 args = inspect.getargspec(self.__init__.__func__).args[1:]

 for k in args:

  setattr(self, k, locals_dict[k])

 keywords = inspect.getargspec(self.__init__.__func__).keywords

 if keywords:

  keywords_dict = locals_dict[keywords]

  for k in keywords_dict:

   setattr(self, k, keywords_dict[k]) 

class Foo(object):

 def __init__(self, name, **kwargv):

  attr_from_locals(locals())

f = Foo('bar', color='yellow', num=1)

print f.__dict__

結果爲:

1

{'color': 'yellow', 'num': 1, 'name': 'bar'}

 

getmembers(object[, predicate])

返回一個包含對象的所有成員的(name, value)列表。返回的內容比對象的__dict__包含的內容多,源碼是通過dir()實現的。

predicate是一個可選的函數參數,被此函數判斷爲True的成員才被返回。

getmodule(object)

返回定義對象的模塊

getsource(object)

返回對象的源代碼

getsourcelines(object)

返回一個元組,元組第一項爲對象源代碼行的列表,第二項是第一行源代碼的行號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章