如何在现有方法中替换函数调用

Mik*_*ike 4 python monkeypatching

给定一个带有类Foo的模块,该模块具有调用bar模块范围中定义的函数的方法,是否有办法在bar不修改模块的情况下替换不同的函数?

class Foo(object):
    def run(self):
        bar()

def bar():
    return True
Run Code Online (Sandbox Code Playgroud)

那么我的一个实例Foo为,我想替代的功能baz()bar(),而无需修改Foo类.

Mar*_*ler 9

假设您的模块被调用deadbeef,并且您正在使用它

import deadbeef
…
foo_instance = deadbeef.Foo()
Run Code Online (Sandbox Code Playgroud)

然后你可以做到

import deadbeef
deadbeef.bar = baz 
…
Run Code Online (Sandbox Code Playgroud)

  • @ Two-BitAlchemist`deadbeef`是一个人们使用的典型"调试"单词之一,例如.轻松找到字节顺序或位翻转问题.很酷的是`0xDEADBEEF`是一个完全有效的32位字:) (2认同)