原标题:python之4类回调函数的使用方法
将函数作为参数传递给另一个函数,一共分为4种情况:
将普通函数传递给普通函数
将普通函数传递给类成员函数
将类成员函数传递给普通函数
将类成员函数传递给类成员函数
这4种情况,在python中都支持。
#!/usr/bin/python3
class Person:
def __init__(self):
pass
def callback(self, data, param = None):
print(self.__class__.__name__ + " callback:")
print("data: " + str(data))
print("param: " + str(param))
def do_call_func(self, func, data, param = None):
print(self.__class__.__name__ + " do_call_func:")
func(data, param)
def do_call_class_func(self, func, data, obj, param = None):
print(self.__class__.__name__ + " do_call_class_func:")
func(obj, data, param)
def mycallback(data, param = None):
print("data: " + str(data))
print("param: " + str(param))
def do_call_func(func, data, param = None):
func(data, param)
def do_call_classfunc(func, data, obj, param = None):
func(obj, data, param)
person = Person()
#common func as callback pass to common func
do_call_func(mycallback, "1111111111", "xxx")
#common func as callback pass to class func
person.do_call_func(mycallback, "22222222")
#class func as callback pass to common func
do_call_classfunc(Person.callback, "333333333", person, None)
#class func as callback pass to class func
person.do_call_class_func(Person.callback, "44444444", person, None)
需要注意的是,如果回调函数是一个类成员函数,那么调用该回调函数时,第一个参数必须是该类的一个对象,也就是说,必须将该类的对象,作为一个普通参数,传递给调用该回调函数的函数。
比较拗口,上面的最后两个调用,都是将person对象作为第3个参数传递给了某个函数,某个函数内部又将该对像作为回调函数的第一个参数来调用回调函数:
do_call_classfunc(Person.callback, "333333333", person, None)
person.do_call_class_func(Person.callback, "44444444", person, None)返回搜狐,查看更多
责任编辑: