2016-04-21 1 views
0

Comment obtenir le code source du module par un 'objet' python de ce module?Comment obtenir le code source du module par un 'objet' python de ce module? (pas inspect.getsource)

class TestClass(object): 

    def __init__(self): 
     pass 

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

Il est bien connu que

print inspect.getsource(TestClass) 

peut être utilisé pour obtenir le code source de 'TestClass'.

Cependant, le résultat de

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

comme ci-dessous, est pas comme prévu.

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 

La question est:

S'il y a un objet comme 'ob' ci-dessus, comment vérifier le code source du module d'ob, ou 'TestClass', par une méthode qui prend elle-même 'ob' en tant que paramètre?

En bref, mettre en œuvre le module suivant

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) 

(Le scénario d'une méthode comme celui-ci est beaucoup plus fréquent que inspect.getsource(), par exemple, vérifier le code source d'un inconnu, objet unpickled

Répondre

2

Les instances n'ont pas de code source.

Utilisation:

print inspect.getsource(type(ob)) 

ou:

print inspect.getsource(ob.__class__) 
+0

Merci beaucoup. Je ne connaissais pas une méthode aussi simple 'type' – Tom