如何通过该模块的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__)
非常感谢。我不知道这样一个简单的方法'类型' – Tom