可以出售的 Python 中的紧凑状态机。
项目描述
可以出售的紧凑型状态机。
如何使用
取自规范的一个非常简单的示例:
from fluidstate import StateMachine, state, transition
class SimpleMachine(StateMachine):
initial_state = 'created'
state('created')
state('waiting')
state('processed')
state('canceled')
transition(before='created', event='queue', after='waiting')
transition(before='waiting', event='process', after='processed')
transition(before=['waiting', 'created'], event='cancel', after='canceled')
“一个稍微复杂一点的例子”
为了演示更高级的功能:
from fluidstate import StateMachine, state, transition
class Relationship(StateMachine):
initial_state = (
lambda relationship: relationship.strictly_for_fun() and 'intimate' or 'dating'
)
state('dating', on_entry='make_happy', on_exit='make_depressed')
state('intimate', on_entry='make_very_happy', on_exit='never_speak_again')
state('married', on_entry='give_up_intimacy', on_exit='buy_exotic_car')
transition(before='dating', event='get_intimate', after='intimate', need='drunk')
transition(
before=['dating', 'intimate'],
event='get_married',
after='married',
need='willing_to_give_up_manhood'
)
def strictly_for_fun(self) -> None:
pass
def drunk(self) -> bool:
return True
def willing_to_give_up_manhood(self) -> bool:
return True
def make_happy(self) -> None:
pass
def make_depressed(self) -> None:
pass
def make_very_happy(self) -> None:
pass
def never_speak_again(self) -> None:
pass
def give_up_intimacy(self) -> None:
pass
def buy_exotic_car(self) -> None:
pass
状态
Fluidstate 状态机必须具有一个初始状态和至少一个其他附加状态。
一个状态可能有 pre 和 post 回调,分别用于在状态on_entry 和on_exit上运行一些代码。这些参数可以是方法名称(作为字符串)、可调用对象或方法名称或可调用对象的列表。
过渡
转换将机器从一个状态引导到另一个状态。转换必须具有 before、after和event参数。before是一个或多个(作为列表)状态,可以从中获取转换。after是转换将引导机器进入的状态。event是必须调用才能启动转换的方法。此方法由 Fluidstate 引擎自动创建。
转换可以有可选的触发器和需要的参数。trigger是一个方法(或可调用的),将在启动转换时调用。如果将参数传递给事件方法,则将它们传递给触发器 方法,如果它接受这些参数。need是一种方法(或可调用),根据其执行结果,调用该方法以允许或拒绝转换。“触发器”和需要都可以是列表。
同一个事件可以处于多个转换中,进入不同的状态,它们各自需要作为选择器。对于具有相同事件的转换,一次只需要返回一个真值。
个性化
状态和转换是在类范围的模式中定义的。但是,可以为单个对象定义状态和转换。例如,将“门”作为状态机:
door.add_state('broken')
door.add_transition(event='crack', before='closed', after='broken')
这些添加只影响 after 对象。
安装
跑:
pip install fluidstate
测试
RN:
tox
归因
Fluidstate 来自Rodrigo Manhães 创建的https://github.com/nsi-iff/fluidity 。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
fluidstate-1.0.0b1.tar.gz
(8.4 kB
查看哈希)
内置分布
fluidstate-1.0.0b1-py3-none-any.whl
(10.2 kB
查看哈希)
关
fluidstate -1.0.0b1.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 523d8d5df7e0b1d4c2ed67cb3542c5e8e3dff136500a8b568645f6d68e2d9179 |
|
| MD5 | 5125553d7efa099bd90f9ee8bcd11e87 |
|
| 布莱克2-256 | d0a196a17c690acde3bc97dfdf996a52d58efc4e85c3d18631cd16d86eb43341 |
关
fluidstate -1.0.0b1-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e60d76c3c14aef449253ff58c0ca103819f8156e7cf8f19b2a8a09c69a800e42 |
|
| MD5 | 61620d42671a668e69d4af94e99282bc |
|
| 布莱克2-256 | 63a1323a83caa8de2f35580a282263d95c22842fec1c37ac60ba9c2d9db04cc5 |