函数和绑定方法观察者模式
项目描述
observed 允许您将函数或方法注册为“观察”其他函数或方法
from observed import observable_function
@observable_function
def observed_func(arg):
print("observed_func: %s"%(arg,))
def observer_func(arg):
print("observer_func: %s"%(arg,))
observed_func.add_observer(observer_func)
observed_func('banana')
>>> observed_func: banana
>>> observer_func: banana
您还可以注册绑定方法的观察者
from observed import observable_method
class Foo:
def __init__(self, name):
self.name = name
@observable_method()
def bar(self, arg):
print("Object %s invoked bar with arg='%s'"%(self.name, arg))
def baz(self, arg):
print("Object %s invoked baz with arg='%s'"%(self.name, arg))
def callback(arg):
print("callback was invoked with arg='%s'"%(arg,))
a = Foo('a')
b = Foo('b')
a.bar.add_observer(b.bar)
a.bar.add_observer(b.baz)
a.bar.add_observer(callback)
a.bar('banana')
>>> Object a invoked bar with arg='banana'
>>> Object b invoked bar with arg='banana'
>>> Object b invoked baz with arg='banana'
>>> callback was invoked with arg='banana'
您可以要求被观察对象在调用观察者时传递自身作为第一个参数
from observed import observable_function
@observable_function
def observed_func():
print("observed_func: I was called")
def observer_func(observed):
print("observer_func: %s called me"%(observed.__name__,))
observed_func.add_observer(observer_func, identify_observed=True)
observed_func()
>>> observed_func: I was called
>>> observer_func: observed_func called me
当被观察的绑定方法将自身作为观察对象传递时,请注意您始终可以通过 __self__
访问关联的实例
from observed import observable_method
class Foo:
def __init__(self, name):
self.name = name
@observable_method()
def bar(self):
print("Object %s invoked bar"%(self.name,))
def callback(observed):
print("callback was invoked by='%s'"%(observed.__self__.name,))
a = Foo('a')
a.bar.add_observer(callback, identify_observed=True)
a.bar()
>>> Object a invoked bar
>>> callback was invoked by a
显著功能包括
-
函数或绑定方法不会仅仅因为正在观察其他对象而被保留。这是因为被观察的对象不会保留任何对观察对象的强引用。在CPython中,这意味着您的观察者在引用计数达到零时将自动断开连接。
-
可以在不可哈希类型的类中的方法上使用 observable_method 装饰器,并且可以在每个类中用于任意数量的方法...
-
...但处理 observable_method 的描述符不会将其管理的实例粘贴任何数据。观察实例上不会有名称冲突的可能性。
安装
observed 存在于python包索引中,因此您可以通过 pip install observed
安装它。或者,您可以下载源代码包,在分发的根目录中执行
$ python setup.py install
新闻
请参阅 NEWS 文件以查看上一版本的用户可见更改。
许可证
请参阅 LICENSE.txt
。
下载
可以从python包索引或通过GitHub获取 observed。
文档
基本用法在本文件的顶部展示。更多示例在 example.py
中给出。
开发
observed 的开发托管在 github 上。当前工作存储库在上面的下载部分给出。
错误报告
请将错误报告提交到GitHub跟踪系统。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
observed-0.5.3.tar.gz (8.8 kB 查看哈希值)
构建分布
observed-0.5.3-py3-none-any.whl (9.5 kB 查看哈希值)
关闭
observed-0.5.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b7e925ef174f6b8587b6d0890958de95da0203c874f968397dbd1ce24002fef6 |
|
MD5 | e4952548475155011da1435402e8f275 |
|
BLAKE2b-256 | a12194244e118a162a320b19cc4d96d5398ebdf8482aa39a61a8a10a13403307 |
关闭
observed-0.5.3-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aabf021739cb0c79aca2cfd97caed6a1e0146883ec56dcf15bfa9cdb83860a88 |
|
MD5 | 5602d54898209bded84fd4dc6ba713c1 |
|
BLAKE2b-256 | 87afff0eb909e299225d4c750551893270863ba1b61f7280c8d7b6a8e4d61b36 |