观察者设计模式在python3中的实现
python-notif的Python项目详细描述
python通知
pythonnotify是python3中观察者设计模式的面向对象实现 支持连接阶段的签名检查, 在调用阶段检查传递的参数,List,Dict和装饰器@应呈报财产
设置
库可以与pip一起安装:
pip3 install python-notify
简单的例子
信号
^{pr2}$集合
此包实现专用的容器数据类型,提供 Python通用内置容器dict的替代品, 列表,带有状态变化的信号。在
列出信号
items_added = Signal(items=typing.Tuple[object], pos=Position)
items_changed = Signal(past_items=typing.Tuple[object], new_items=typing.Tuple[object], pos=Position)
items_removed = Signal(items=typing.Tuple[object], pos=Position)
items_cleared = Signal()
# Where Position = t.Union[int, slice]
列出示例
import typing as t
from notify.collections import List
def on_items_added(items: t.Iterable[object], pos: int):
print(items, pos)
obj = List((1, 2, 3))
obj.items_added.connect(on_items_added)
obj.extend((4, 5))
# will print: (4, 5), 3
Dict信号:
key_added = Signal(key=object, item=object)
key_changed = Signal(key=object, past_item=object, new_item=object)
key_removed = Signal(key=object)
@应呈报财产
notifiable_property decorator是Python的@property decorator的替代品 状态变化的信号。在
from notify.property import notifiable_property
class Obj:
def __init__(self, value):
self._value = None
self.value = value
@notifiable_property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = value * 2
@value.deleter
def value(self):
del self._value
obj = Obj(value=1)
assert obj.value == 2
def on_value_changed(past_value, new_value):
print(f'{past_value=}, {new_value=}')
obj.value_changed.connect(on_value_changed)
obj.value = 2
# Will print 'past_value=2, new_value=4'
assert obj.value == 4
def on_value_removed(past_value):
print(f'{past_value=}')
obj.value_removed.connect(on_value_removed)
del obj.value
# Will print 'past_value=4'
- 项目
标签: