我有一个简单的方法,它接受一个函数以便稍后调用它:
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
的代码不在我的控制之下。它来自一个需要处理函数的网络服务器。
答案 0 :(得分:3)
您可以简单地将方法对象传递给类:
called = CallMe(obj.Func)
为了扩展一点,实例方法实际上只是原始的类函数:
>>> obj.Func.__func__
<function __main__.WithClassMethod.Func>
,在访问实例(obj.Func
)期间,通过将__get__
(实例)附加到它们的描述符(self
)进行转换:
>>> obj.Func.__self__
<__main__.WithClassMethod at 0x7fbe740ce588>
所以你几乎可以用方法做任何你想做的事情。