手动将回调添加到现有模块方法的正确方法是什么?

时间:2018-07-15 18:30:44

标签: python events callback patch

例如...

我想将几种方法视为“事件”,并在调用它们后触发我自己的函数。

我不手动调用这些。

作为一个不熟悉Python但熟悉C#的人,我理想上希望能够修补到模块方法中,并更改功能或仅回调我自己的方法。

编辑:添加示例

def my_own_callback_method():
    # do something here


# imagine in a large code base there's a method I'd like to target and fire my own callback ...
#
# ... something else invokes a method ('not_my_method') in a third-party module ('core').


def not_my_method():
    # the orginial function executes as it would
    # 
    # but I'd like to pre/post callback my own method from my module
    my_own_callback_method()

或者,能够“修补”方法并更改其功能会很好。下面的示例-

# again, imagine in a large code base there's a method I'd like to target ...
# ... but I'd like to alter the way this method works in my own module.
# 
# kind of like...


def my_method(something:str, something_else:int):
    # my own method patch of how the original 'not_my_method' should work

def not_my_method(something:str, something_else:int):
    return my_method(something, something_else)

1 个答案:

答案 0 :(得分:0)

如果您对not_my_method的代码没有任何控制,由于您实际上想更改其源代码,这几乎是不可能的事情。

我相信,您可以实现的最好方法是将其包装在自己的函数中,该函数在调用my_method之后调用not_my_method,但是就可以了。

也许您是从错误的角度看它。修补调用not_my_method的实际事件可能比修补not_my_method本身容易。