观察者设计模式的一个简单的类c实现。

nmevent的Python项目详细描述


nEvent v0.3.2-c类似于观察者模式的实现

这是一个python模块,类似于 观察者模式(http://en.wikipedia.org/wiki/Observer_pattern)。 它的主要目的和目标是允许开发人员使用事件 在他们的python类中使用类似c的语法。

用法示例

最直接的使用方法是:

>>> import nmevent
>>> class ExampleClass(object):
...    def __init__(self):
...       self.event = nmevent.Event()
...
...    def do_something(self):
...       self.event(self)
...
>>> def handler(sender, **keywords):
...    print "event occured"
...
>>> example = ExampleClass()
>>> example.event += handler
>>> example.do_something()
event occured

应该注意的是,事件不一定是一个对象 属性。事件实例基本上只是一个可调用的对象 作为一种“调度解复用器”。

然而,这种用法并不是很像C。在c中,事件在类中声明 作用域,这就是为什么事件类也支持描述符 协议(可以使用与使用内置property对象相同的方式)

>>> from nmevent import Event
>>> class ExampleClass(object):
...    event = Event()
...
...    def _do_something(self):
...       self.event()
...
>>> def handler(sender, **keywords):
...    pass
...
>>> example = ExampleClass()
>>> example.event += handler

也许这看起来比实例化事件更直接 在对象的构造器中,但实际上还有很多事情要做 时间。

最后,还有属性和 nmproperty函数decorator,它的工作方式非常类似于内置的 propertyobject和decorator,除了它可以选择性地调用回调 函数,如果在调用setter函数后属性值发生更改它 可以与with_events类修饰符一起工作,后者 用属性更改事件装饰类,并将它们连接到 属性类的实例。它还为内置的 property对象,但必须在setter中自己引发事件 功能或其他。

>>> @nmevent.with_events
... class ExampleClass(object):
...    @nmevent.nmproperty
...    def x(self):
...       return self._x
...
...    @x.setter
...    def x(self, value):
...       self._x = value
...
...    @property
...    def y(self):
...       return self._y
...
...    @y.setter
...    def y(self, value):
...       old_value, self._y = self._y, value
...       self.y_changed(old_value = old_value)
...
...    def __init__(self):
...       self._x = None
...       self._y = None
...
>>> def handler(sender, **keywords):
...    print "x changed"
...
>>> example = ExampleClass()
>>> example.x_changed += handler
>>> example.x = 10 # handler gets called
x changed

许可证

版权所有(c)2010年1月,milík.

此程序是免费软件:您可以重新分发和/或修改 根据由 自由软件基金会,或者许可证的第3版,或者 (由您选择)任何更高版本。

这个程序的发布是希望它能有用, 但是没有任何保证;没有事件 为了特定目的的适销性或适合性。见 GNU Lesser通用公共许可证了解更多详细信息。

你应该收到GNU Lesser通用公共许可证的副本 还有这个节目如果没有,请参见<;http://www.gnu.org/licenses/>;。

更改

v0.3.2
adapt函数添加了相当有用的功能:它 现在可以连接到“嵌套事件”。参见函数的文档 更多信息。它还可以断开处理器。
v0.3.1
添加了docstring测试并修复了所有docstring,以便 会过去的。结果,在事件中发现了另一个问题 结合。通过添加instanceevent.bind 方法,在提升时主要由属性类使用 “已更改”事件。
v0.3

修复了导致未绑定事件实际上不是 以对象实例作为第一个参数调用时绑定。

添加了带有属性的类装饰器 用每个属性的“private”属性装饰类,并 自动getter和setter,其中一个丢失

v0.2.1
重写了一些单元测试并添加了新的单元测试改进的文档 一点点。
v0.2
重写了大部分代码。事件类现在作为 描述符,不需要单独的事件时隙 类和简化用法将callbackstore添加到摘要 回叫存储器。
v0.1.1
源代码没有更改改进文档和单元测试。
v0.1
初始版本。

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

推荐PyPI第三方库


热门话题
JavaSpring重定向请求处理程序   SwingJava:拆分字符串并将其放入文本区域的   Java:标记“”上出现语法错误,此标记后面应为表达式   web服务Java RestService从日志文件写入和读取数据   java如何将ArrayList<String>转换为char数组,然后向后打印每个单词?   java SimpleDataFormat解析返回年终日期   加密Java aes解密bytebuffer,包括填充为空字节   java有没有办法从特定的if语句调用变量?   java从更新返回到渲染   spring GRPC Java登录测试   java为什么下面的代码不工作(StringBuffer.toString!=null)   java是一种可行的模式吗?   使用Spring集成测试的JavaOSGi片段   java jCommander为未知和未使用的值引发异常?   在imageView的editText中输入的java图像URL