易于类之间的数据传输。
fastwire的Python项目详细描述
快线
FastWire是一个简单的包,用于促进对象之间的通信。它 提供与其他几个包类似的功能,例如 blinker,wires和wires。它的目的是更小更轻。 它使用控制反转和依赖注入来帮助保持代码简单。
基本用法
创建信号容器:
importfastwireasfwsc=fw.SignalContainer()
然后产生一个信号…
signal=sc.signal('your_name')
我们可以这样连接到该信号:
classA():def__init__(self):signal.connect(self.connected)defconnected(self,a):print('Class A instance received a: '+str(a))a=B()signal.connect(a.connected)signal.emit(a=5.7)# Class A instance received a 5.7
如果愿意,我们可以连接其他信号:
signal_b=sc.signal('new_sig')signal_b.connect(a.connected)signal_b.emit(a=3)# Class A instance received a 5.7
连接也适用于函数。我们可以把一个函数连接到 信号。
deftest_fun(a):print('test_fun got a '+str(a))signal.connect(test_fun)signal.emit(a=5.7)# Class A instance received a 5.7# test_fun got a 5.7
只接受关键字参数以确保所需的数据类型为 通过。
emit方法不返回任何内容。但是signal.fetch方法可以。它 要求有一个函数或方法“提供”返回 价值。signal.fetch_all方法从 所有接收器。
信号属性
信号n
接收器数量。
存在信号接收器
如果有接收器,则为真。
姓名
信号的名称。
装饰工
使用decorators可以方便地自动连接。做这个, 类需要继承fw.wired。
signal_c=sc.signal('C')classB(fw.Wired):@fw.receives(signal_c)defconnected(self,a):print('Class B instance got '+str(a))b=B()signal_c.emit(a=7)# Class B instance got 7
函数需要使用不同的decorator。
@fw.fn_receives(signal_c)deftest_fun_2(a):print('test_fun_2 got '+str(a))signal_c.emit(a=88)# Class B instance got 88# test_fun_2 got 88
使用@fastwire.supply decorator获取提供数据的方法, @fastwire.fn_为提供数据的函数提供decorator。
条件
可以添加条件。他们需要一个名为“check”的方法 从调用方和接收方传递组合关键字参数。它需要 返回布尔值。如果是真的,给定的接收器会收到信号,如果不是, 不需要。它们还需要一个名为“name”的类属性。
添加如下信号条件:
classMy_Condition():name='default'defcheck(self,a,**kwargs):''' The main check call - must return a boolean '''ifa<10:returnTrueelse:returnFalsesignal.add_condition(My_Condition())
现在,只有当a小于10时,接收器才能接收信号:
signal.emit(a=5.7)# Class A instance received a 5.7# test_fun got a 5.7signal.emit(a=15)# Nothing happens
删除:
signal.remove_condition(My_Condition.name)signal.emit(a=15)# Class A instance received a 15# test_fun got a 15
条件类是完全开放的-它们可以像上面一样简单 例子或者像状态机一样复杂。
静音
没有接收器接收到静音信号。你可以很容易地静音和取消静音信号…
signal.mute()signal.emit(a=3)# Nothing mappenssignal.unmute()signal.emit(a=3)# Class A instance received a 3# test_fun got a 3