观察者设计模式的一个简单的类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
- 初始版本。