2015-03-02 75 views
0

我有下面的代碼打印的Python方法的文檔:如何使用檢查或__doc__方法

import os 
import imp 
import sys 
import inspect 
import urlparse 
from cgi import escape 

def get_module(ClassName, Path): 
    fp, pathname, description = imp.find_module(ClassName, [Path]) 
    module_loaded = imp.load_module(ClassName, fp, pathname, description) 
    return module_loaded 


def get_class_members(className): 
    print "Members of "+str(className) 
    member_functions = inspect.getmembers(className, predicate=inspect.ismethod) 
    for each_item in member_functions: 
     print each_item[0].__doc__ 

def get_all_classes(path, module): 

    module_loaded = None 
    sys.path.append(path) 

    module_loaded = get_module(module, path) 

    if None != module_loaded: 
     class_list = module_loaded.get_all_classes() 
     print "classes are "+str(class_list) 
     return class_list 




def main(): 
    class_list = get_all_classes('.', 'Class_Interface_File') 
    for each_class in class_list: 
     temp_module = get_module(each_class, '.') 
     my_class = getattr(temp_module, each_class) 
     instance = my_class() 
     get_class_members(instance) 
     print "-----------" 

if __name__ == "__main__": 
    main() 

Class_Interface_file返回的類別名稱例如[「社會」,「音頻」] 的方法get_class_members列表我在這裏有問題。我想打印通過inspect.getmembers發現的每個成員函數的註釋。我dono如何使用each_item的值連接className。

或者是否可以直接打印來自each_item的成員函數的文檔?

請幫忙。

+1

你似乎正在重新實現內置'help'函數......是否有原因:-)? – mgilson 2015-03-02 23:30:08

+0

我可以直接在each_item [0]上使用幫助嗎?這是成員函數的名稱.. – user954299 2015-03-02 23:36:54

+0

我試圖使用幫助(each_item [0]),但它沒有返回任何可用於函數的文檔。因爲我有文檔嵌入在「」「」「」 – user954299 2015-03-02 23:39:18

回答

0

好了,做了一些與您的代碼玩弄....

我有一個類三角形的模塊三角形的一些方法。

>>>import inspect 
>>>import triangle 
>>>mems = inspect.getmembers(triangle.Triangle) 
>>>mems 
[('__doc__', None), ('__init__','<unboound method.....>), etc)] 

getmembers()返回元組列表。 所以在你的代碼中,通過這個循環,你要求的是each_item[0].__doc__,[0]指的是包含函數名稱的字符串。所以該行只返回字符串對象的__doc__。此更改爲[1]將返回__doc__的實際方法:

>>>mems[3][0] #the name of the function itself 
'drawEquilateral' 
>>>#here I reference the second tuple element of the fourth member 
... 
>>>mems[3][1].__doc__ 
'draw an equilateral triangle' 
>>>"Method %s: %s" %(mems[3][0], mems[3][1].__doc__) 
'Method drawEquilateral: draw an equilateral triangle' 

希望這有助於。

+0

非常感謝,它幫助了很多:) – user954299 2015-03-03 00:36:45

+0

我只有一個問題。就像我有一個幫助器類,它返回所有的成員函數作爲字符串列表。我可以在這些字符串類型上使用__doc__嗎?你的答案將非常有用。 – user954299 2015-03-03 06:11:13

+0

如果您在這裏調用''任何字符串'.__ doc__',它將一般返回字符串對象的文檔,所以如果您想要打印列表中指定的實際函數的文檔字符串,您必須執行多一點工作(但使用'getmembers()'不難)。可以在聊天中提供更多幫助 – tenwest 2015-03-03 20:31:20

相關問題