Python反射 - 我可以使用它来获取方法定义的源代码

时间:2009-04-22 14:05:24

标签: python reflection

重复..


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

例如: 如果我有方法

def sayHello():
    print "Hello"

type(sayHello)给出了答案'type function'。我能获取此函数对象的源代码字符串吗?它被认为是一个安全问题吗?

4 个答案:

答案 0 :(得分:18)

使用检查模块:

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

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

答案 1 :(得分:2)

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以进行反编译。

答案 2 :(得分:2)

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

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

了解详情:https://docs.python.org/2/library/inspect.html#inspect.getsource

答案 3 :(得分:0)

没有内置函数来获取函数的源代码,但是,如果您可以访问源代码(它将在您的Python / lib目录中),您可以构建自己的函数。