python 中函数对象有一个 __code__ 属性(它也是一个 code 对象)保存了函数定义中的实际代码。 通过它可以获取到一些该函数的元信息,比如 __code__.co_argcount 可以查看函数参数个数, __code__.co_code 可以查看函数的字节码。
虽然 __code__ 本身是一个只读对象,但是 function对象本身是可以修改的,所以如果我们可以将它的 .__code__ 属性替换掉。比如
def foo():
return "foo"
def bar():
return "bar"
# 开始换脑
bar.__code__ = foo.__code__
return bar()
foo
