易于类之间的数据传输。

fastwire的Python项目详细描述


快线

FastWire是一个简单的包,用于促进对象之间的通信。它 提供与其他几个包类似的功能,例如 blinkerwireswires。它的目的是更小更轻。 它使用控制反转和依赖注入来帮助保持代码简单。

基本用法

创建信号容器:

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Hibernate:jpamodelgen生成java而不是类   java如何在第二次活动结束后显示广告?   javascript如何在linux或windows上将java导出到jar   java One ArrayList添加了2个不同的选项   AmazonWeb服务如何在java中使用AWS Textract检索pdf中存在的表   java为什么RecycleView中的水平项在单击时不起作用?   java计算如果存在映射   java在捕获的组上应用正则表达式   如何使用Java在MySQL的同一个表中插入来自不同类的值   java字符串中最常见的字母(大写和小写)   Spring SessionBean实例正在由java中的多个用户共享   使用Spring Boot将@WebInitParam中的值外部化   java一创建线程就开始执行(多线程)   java是安卓所需的系统权限。意图行动给你打电话?