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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值