简约事件系统
项目描述
# 可观察者
[](https://travis-ci.cn/timofurrer/observable)
[](https://github.com/ambv/black)
**pyobservable** 是一个专为Python设计的简约事件系统。它为您提供一个易于使用的接口,在特定事件发生时触发任意函数。
```python
from observable import Observable
obs = Observable()
@obs.on("error")
def error_handler(message)
# 进行一些复杂的错误处理
logging.error(f"发生错误:{message}")
...
def do_time_travel()
# 进行一些时间旅行
...
if year != 1291
obs.trigger("error", "时间旅行到1291未成功")
```
**注意:** 我们只支持Python 3!仅支持Python版本 >= 3.5。对于旧版Python版本,请使用 [v0.3.2](https://pypi.ac.cn/project/observable/0.3.2/)。
## 使用方法
使用 `pip` 从PyPI安装它
pip install 可观察者
完成后,您可以使用 `observable`
```python
from observable import Observable
obs = Observable()
```
## 使用说明
### `on`:使用 `on` 注册事件处理程序
有两种方式可以将函数注册到事件中。
第一种方式是使用装饰器注册事件,如下所示
```python
@obs.on("error")
def error_func(message)
print("错误:%s" % message)
```
第二种方式是通过方法调用注册
```python
def error_func(message)
print("错误:%s" % message)
obs.on("error", error_func)
```
### `once`: 使用 `once` 注册事件处理程序
`once` 与 `on` 类似,但一旦触发事件处理程序,它将被移除且无法再次触发。
### `trigger`: 触发事件
您可以使用 `trigger` 方法触发已注册的事件
```python
obs.trigger("error", "这是我的错误信息")
```
如果找不到事件 `error` 的处理程序,将抛出 `Observable.NoHandlerFound` 异常。
### `off`: 移除处理程序和事件
从指定事件中移除处理程序
```python
obs.off("error", error_func)
```
```python
obs.off("error", [error_func, second_error_func])
```
从指定事件中移除所有处理程序
```python
obs.off("error")
```
清除所有事件
```python
obs.off()
```
### `get_all_handlers`, `get_handlers` 和 `is_registered`: 检查哪些处理程序已注册
假设您注册了以下处理程序
```python
@obs.on("success")
def success_func()
print("成功!")
@obs.on("error")
def error_func(message)
print("错误:%s" % message)
```
然后您可以使用以下方法来检查已注册的处理程序
```python
>>> obs.get_all_handlers()
{'success': [<function success_func at 0x7f7f32d0a1e0>], 'error': [<function error_func at 0x7f7f32d0a268>]}
>>> obs.get_handlers("success")
[<function success_func at 0x7f7f32d0a1e0>]
>>> obs.get_handlers("other_event")
[]
```
***
*<p align="center">此项目发布于 [MIT](LICENSE)。<br>[Timo Furrer](https://tuxtimo.me) 的项目。<br>- :tada: -</p>*
[](https://travis-ci.cn/timofurrer/observable)
[](https://github.com/ambv/black)
**pyobservable** 是一个专为Python设计的简约事件系统。它为您提供一个易于使用的接口,在特定事件发生时触发任意函数。
```python
from observable import Observable
obs = Observable()
@obs.on("error")
def error_handler(message)
# 进行一些复杂的错误处理
logging.error(f"发生错误:{message}")
...
def do_time_travel()
# 进行一些时间旅行
...
if year != 1291
obs.trigger("error", "时间旅行到1291未成功")
```
**注意:** 我们只支持Python 3!仅支持Python版本 >= 3.5。对于旧版Python版本,请使用 [v0.3.2](https://pypi.ac.cn/project/observable/0.3.2/)。
## 使用方法
使用 `pip` 从PyPI安装它
pip install 可观察者
完成后,您可以使用 `observable`
```python
from observable import Observable
obs = Observable()
```
## 使用说明
### `on`:使用 `on` 注册事件处理程序
有两种方式可以将函数注册到事件中。
第一种方式是使用装饰器注册事件,如下所示
```python
@obs.on("error")
def error_func(message)
print("错误:%s" % message)
```
第二种方式是通过方法调用注册
```python
def error_func(message)
print("错误:%s" % message)
obs.on("error", error_func)
```
### `once`: 使用 `once` 注册事件处理程序
`once` 与 `on` 类似,但一旦触发事件处理程序,它将被移除且无法再次触发。
### `trigger`: 触发事件
您可以使用 `trigger` 方法触发已注册的事件
```python
obs.trigger("error", "这是我的错误信息")
```
如果找不到事件 `error` 的处理程序,将抛出 `Observable.NoHandlerFound` 异常。
### `off`: 移除处理程序和事件
从指定事件中移除处理程序
```python
obs.off("error", error_func)
```
```python
obs.off("error", [error_func, second_error_func])
```
从指定事件中移除所有处理程序
```python
obs.off("error")
```
清除所有事件
```python
obs.off()
```
### `get_all_handlers`, `get_handlers` 和 `is_registered`: 检查哪些处理程序已注册
假设您注册了以下处理程序
```python
@obs.on("success")
def success_func()
print("成功!")
@obs.on("error")
def error_func(message)
print("错误:%s" % message)
```
然后您可以使用以下方法来检查已注册的处理程序
```python
>>> obs.get_all_handlers()
{'success': [<function success_func at 0x7f7f32d0a1e0>], 'error': [<function error_func at 0x7f7f32d0a268>]}
>>> obs.get_handlers("success")
[<function success_func at 0x7f7f32d0a1e0>]
>>> obs.get_handlers("other_event")
[]
```
***
*<p align="center">此项目发布于 [MIT](LICENSE)。<br>[Timo Furrer](https://tuxtimo.me) 的项目。<br>- :tada: -</p>*