如何通过该模块的python“对象”获取模块源代码? (not inspect.getsource)

问题描述:

如何通过该模块的python'object'获取模块源代码?如何通过该模块的python“对象”获取模块源代码? (not inspect.getsource)

class TestClass(object): 

    def __init__(self): 
     pass 

    def testMethod(self): 
     print 'abc'  
     return 'abc' 

它众所周知,

print inspect.getsource(TestClass) 

可以用来获取 '的TestClass' 的源代码。

然而,

ob = TestClass() 
print inspect.getsource(ob) 

如下结果未如预期。

Traceback (most recent call last): 
    File "D:\Workspaces\WS1\SomeProject\src\python\utils\ModuleUtils.py", line 154, in <module> 
    print inspect.getsource(ob) 
    File "C:\SciSoft\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\lib\inspect.py", line 701, in getsource 
    lines, lnum = getsourcelines(object) 
    File "C:\SciSoft\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\lib\inspect.py", line 690, in getsourcelines 
    lines, lnum = findsource(object) 
    File "C:\SciSoft\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\lib\inspect.py", line 526, in findsource 
    file = getfile(object) 
    File "C:\SciSoft\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\lib\inspect.py", line 420, in getfile 
    'function, traceback, frame, or code object'.format(object)) 
TypeError: <utils.TestClass.TestClass object at 0x0000000003C337B8> is not a module, class, method, function, traceback, frame, or code object 

的问题是:

如果像上述“OB”,如何检查作业的模块的源代码,或“的TestClass”的对象,经由采用“OB”本身的方法作为参数?

总之,实施以下模块

def getSource(obj): 
    ###returns the result which is exactly identical to inspect.getsource(TestClass) 

ob = TestClass() 
###prints the result which is exactly identical to inspect.getsource(TestClass) 
print getSource(ob) 

(像这样的方法的情况下比inspect.getsource()更常见,例如,检查一个未知的,拆封对象的源代码)

实例没有源代码。

用途:

print inspect.getsource(type(ob)) 

或:

print inspect.getsource(ob.__class__) 
+0

非常感谢。我不知道这样一个简单的方法'类型' – Tom