Python反射-我能用它来获取方法定义的源代码吗

2024-06-10 19:45:31 发布

您现在位置:Python中文网/ 问答频道 /正文

复制..


我有一个成功运行的方法定义,但希望在运行时修改它。

例如: 如果我有办法

def sayHello():
    print "Hello"

type(sayHello)给了我答案“type function”。我能得到这个函数对象的源代码字符串吗。这被认为是安全问题吗?


Tags: ofthelambdayouwhichgettypecode
3条回答

使用检查模块:

import inspect
import mymodule
print inspect.getsource(mymodule.sayHello)

必须在导入的模块中定义函数。

sayHello.func_code.co_code返回一个字符串,我认为该字符串包含该方法的编译代码。由于Python是在内部将代码编译为虚拟机字节码,所以剩下的可能就是这些了。

不过,你可以拆卸它:

import dis

def sayHello():
  print "hello"

dis.dis(sayHello)

这张照片:

   1           0 LOAD_CONST               1 ('hello')
               3 PRINT_ITEM
               4 PRINT_NEWLINE
               5 LOAD_CONST               0 (None)
               8 RETURN_VALUE

查看Decompyle中的de编译器。

要获取类实例上方法的源,请执行以下操作:

import inspect
myobj = MyModel()
print inspect.getsource(myobj.my_method)

阅读更多:https://docs.python.org/2/library/inspect.html#inspect.getsource

相关问题 更多 >