简单的信号/槽实现
项目描述
这是什么?
signaling 是一个简单的信号/槽模式的实现,正如从 信号与槽模式 中所知的,它是从 Qt 框架 中获得的。它没有外部要求,并且有100%的测试覆盖率。
安装
常规方法
pip install signaling
如何使用它?
假设您有一个函数,每当连接的信号被发射时都应该调用它,如下面的代码块所示
def slot(arg):
print("Slot called with {}".format(arg))
signal = Signal(args=['arg'])
signal.connect(slot)
signal.emit(arg=1) # Slot called with 1
实际上,您可以将多个槽连接到同一个信号,只要它们具有相同的函数签名。
请注意,signaling 库在连接槽和发射信号时执行一些合理性检查。
连接到信号的每个槽都必须提供与Signal构造函数的args参数所指定的相同的参数规范。
必须使用与Signal构造函数中指定的完全相同的参数进行emit-调用。
因此,以下所有示例都会引发异常
def slot_with_arg(arg):
pass
def slot_without_arg():
pass
# InvalidSlot: Slot 'slot_with_arg' has to callable without arguments
Signal().connect(slot_with_arg)
# InvalidSlot: Slot 'slot_without_args' has to accept args ['arg'] or **kwargs.
Signal(args['arg']).connect(slot_without_arg)
s = Signal()
s.connect(slot_without_args)
# InvalidEmit: Emit has to be called without arguments.
s.emit(foo=1)