Sat*_*ali 10 python reflection
重复..
我有一个成功运行的方法定义,但想在运行时修改它.
例如:如果我有方法
def sayHello():
print "Hello"
Run Code Online (Sandbox Code Playgroud)
type(sayHello)给我答案'type function'.我能获取此函数对象的源代码字符串吗?它被认为是安全问题吗?
the*_*ler 19
使用检查模块:
import inspect
import mymodule
print inspect.getsource(mymodule.sayHello)
Run Code Online (Sandbox Code Playgroud)
必须在导入的模块中定义该函数.
要获取类实例上方法的来源,请执行以下操作:
import inspect
myobj = MyModel()
print inspect.getsource(myobj.my_method)
Run Code Online (Sandbox Code Playgroud)
阅读更多:https ://docs.python.org/2/library/inspect.html#inspect.getsource
sayHello.func_code.co_code
返回一个我认为包含该方法的编译代码的字符串。由于 Python 在内部将代码编译为虚拟机字节码,因此这可能就是剩下的全部了。
不过你可以拆解它:
import dis
def sayHello():
print "hello"
dis.dis(sayHello)
Run Code Online (Sandbox Code Playgroud)
这打印:
1 0 LOAD_CONST 1('你好') 3 打印项目 4 PRINT_NEWLINE 5 LOAD_CONST 0(无) 8 返回值
看看Decompyle的反编译器。