如何使用 object/method 对的回调函数

how to use callback functions with object/method pair

我有一个简单的方法,它接受一个稍后回调的函数:

def SimpleFunc(parm1):
    print(parm1)

class CallMe:
    def __init__(self, func):
        self.func = func

    def Call(self, parm):
        self.func(parm)

caller = CallMe(SimpleFunc)
caller.Call("Hallo")

效果不错!

但我想使用 class 方法并想在定义的对象上调用该方法作为回调:

class WithClassMethod:
    def __init__( self, val ):
        self.val = val 

    def Func(self, parm):
        print( "WithClass: ", self.val, parm )


obj = WithClassMethod(1)
caller = CallMe( ??? )
caller.Call("Next")

如何将 object/method 对绑定到可调用对象?

注意:来自CallMe的代码不在我的控制之下。它来自需要处理函数的网络服务器。

您可以简单地将方法对象传递给 class:

called = CallMe(obj.Func)

扩展一下,实例方法实际上只是原始的 class 函数:

>>> obj.Func.__func__
<function __main__.WithClassMethod.Func>

在访问实例 (obj.Func) 期间,通过将 self(实例)附加到它们的描述符 (__get__) 进行转换:

>>> obj.Func.__self__
<__main__.WithClassMethod at 0x7fbe740ce588>

因此您几乎可以像使用函数一样使用方法做任何您想做的事情。