在Python中调用另一个类的回调

0 投票
1 回答
797 浏览
提问于 2025-04-18 12:02

我刚开始学习Python,看到了一些相关的问题。我的需求是,我的一个类需要调用另一个类的成员,并传递一个回调函数。另一个类的方法会在稍后的时间调用这个回调函数。我写了一段示例代码,运行起来似乎没问题。但是,我不太确定这样做是否正确,特别是我调用回调函数的方式。当回调函数被调用时,我希望能获取到它的上下文。在下面的代码中,打印出来的值似乎是匹配的。如果有什么问题或者更好的实现方式,我会很感激你的反馈。以下是示例代码,内容不多。

class cb_class():
    def dp_prnt(self, cb_fn, temp_list, key_val):
        print "CB Class called %d" % key_val
        cb_fn(temp_list, 100) #IS this right??
class app_class():
    def __init__(self):
        self.ii = 8
    def hndlr(self, temp_list, key_val):
        self.key_val = key_val
        cb_class_obj = cb_class()
        cb_class_obj.dp_prnt(self.cb_hndlr, temp_list, key_val)
    def cb_hndlr(self, temp_list, key_val):
        print "CB Called %d"  %key_val
        phy = temp_list.get('phy')
        print "phy %s" % phy
        print "old VAL %d" % temp_list.get('old_val')
        print "ii is %d" % self.ii
        print "keyval is %d" % self.key_val
obj_app = app_class()
lst = {'phy': 'eth3', 'old_val': 23}
obj_app.hndlr(lst, 67)

非常感谢。

1 个回答

0

你这样使用回调函数是对的。

注意,调用 obj_app.hndlr(a,b) 和调用 app_class.hndlr( obj_app, a, b) 是完全一样的——这就是内部发生的事情。

你可能想看看 PEP 8,里面有一些代码风格的指导。类名应该使用大驼峰命名法(CamelCase),而且在函数和类之间应该留一个空行。

撰写回答