如何使用 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>
因此您几乎可以像使用函数一样使用方法做任何您想做的事情。
我有一个简单的方法,它接受一个稍后回调的函数:
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>
因此您几乎可以像使用函数一样使用方法做任何您想做的事情。