如何使用对象/方法对的回调函数

时间:2017-01-23 10:51:10

标签: python python-3.x callback callable

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

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 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")

如何将对象/方法对绑定到可调用对象?

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

1 个答案:

答案 0 :(得分:3)

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

called = CallMe(obj.Func)

为了扩展一点,实例方法实际上只是原始的类函数:

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

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

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

所以你几乎可以用方法做任何你想做的事情。