Skip to main content

可以出售的 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_entryon_exit上运行一些代码。这些参数可以是方法名称(作为字符串)、可调用对象或方法名称或可调用对象的列表。

过渡

转换将机器从一个状态引导到另一个状态。转换必须具有 beforeafterevent参数。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 查看哈希

已上传 source

内置分布

fluidstate-1.0.0b1-py3-none-any.whl (10.2 kB 查看哈希

已上传 py3