欢迎访问宙启技术站
智能推送

构建一个支持回调函数的CallbackList()类

发布时间:2023-12-31 17:57:54

CallbackList类是一个用于管理回调函数的类,它允许用户向列表中添加回调函数,并在需要的时候调用这些回调函数。

下面是一个实现CallbackList类的代码:

class CallbackList:
    def __init__(self):
        self.callbacks = []

    def add_callback(self, callback):
        self.callbacks.append(callback)

    def remove_callback(self, callback):
        self.callbacks.remove(callback)

    def invoke(self, *args, **kwargs):
        for callback in self.callbacks:
            callback(*args, **kwargs)

在这个类中,我们使用一个列表来存储添加的回调函数。add_callback方法用于向列表中添加回调函数,remove_callback方法用于从列表中删除回调函数。invoke方法用于调用所有的回调函数,并将传入的参数传递给它们。

下面是一个使用CallbackList类的例子:

def callback1():
    print("Callback 1 is called")

def callback2(name, age):
    print(f"Callback 2 is called with name={name} and age={age}")

# 创建一个CallbackList实例
callback_list = CallbackList()

# 向CallbackList中添加回调函数
callback_list.add_callback(callback1)
callback_list.add_callback(callback2)

# 调用所有的回调函数
callback_list.invoke()

# 从CallbackList中删除回调函数
callback_list.remove_callback(callback1)

# 再次调用所有的回调函数,此时callback1不会被调用
callback_list.invoke("John", 25)

上面的例子中,我们首先创建了一个CallbackList实例callback_list。然后,我们定义了两个回调函数callback1和callback2,并使用add_callback方法将它们添加到callback_list中。接下来,我们调用callback_list的invoke方法,这将调用所有的回调函数。在最后,我们使用remove_callback方法将callback1从callback_list中删除,并再次调用invoke方法,此时callback1不会被调用。

使用CallbackList类,我们可以方便地管理回调函数,并在需要的时候调用它们。这在许多应用场景中都非常有用,例如事件处理、观察者模式等。