超级状态机为您提供了构建有限状态机的实用程序。

super_state_machine的Python项目详细描述


https://badge.fury.io/py/super_state_machine.pnghttps://travis-ci.org/beregond/super_state_machine.png?branch=masterhttps://pypip.in/d/super_state_machine/badge.png

超级状态机为您提供了构建有限状态机的实用程序。

功能

  • 使用Python2.7、3.3、3.4和Pypy进行了全面测试。

  • 创建有限状态机:

    >>>fromenumimportEnum>>>fromsuper_state_machineimportmachines>>>classTask(machines.StateMachine):......state='draft'......classStates(Enum):......DRAFT='draft'...SCHEDULED='scheduled'...PROCESSING='processing'...SENT='sent'...FAILED='failed'>>>task=Task()>>>task.is_draftFalse>>>task.set_draft()>>>task.state'draft'>>>task.state='scheduled'>>>task.is_scheduledTrue>>>task.state='process'>>>task.state'processing'>>>task.state='wrong'***ValueError:Unrecognizedvalue('wrong').
  • 定义允许的转换图,定义其他命名转换 跳棋:

    >>>classTask(machines.StateMachine):......classStates(Enum):......DRAFT='draft'...SCHEDULED='scheduled'...PROCESSING='processing'...SENT='sent'...FAILED='failed'......classMeta:......allow_empty=False...initial_state='draft'...transitions={...'draft':['scheduled','failed'],...'scheduled':['failed'],...'processing':['sent','failed']...}...named_transitions=[...('process','processing',['scheduled']),...('fail','failed')...]...named_checkers=[...('can_be_processed','processing'),...]>>>task=Task()>>>task.state'draft'>>>task.process()***TransitionError:Cannottransitfrom'draft'to'processing'.>>>task.set_scheduled()>>>task.can_be_processedTrue>>>task.process()>>>task.state'processing'>>>task.fail()>>>task.state'failed'

    注意,第三个参数限制了从哪个状态转换为 已将添加到allowed(在process的情况下,新的allowed transition将是 已添加,从“计划”添加到“处理”)。无参数表示全部可用 状态、None或空列表将不会添加任何超出定义范围的内容。

  • 使用状态机作为属性:

>>>fromenumimportEnum>>>fromsuper_state_machineimportmachines,extras>>>classLock(machine.StateMachine):...classStates(Enum):......OPEN='open'...LOCKED='locked'......classMeta:......allow_empty=False...initial_state='locked'...named_transitions=[...('open','open'),...('lock','locked'),...]>>>classSafe(object):......lock1=extras.PropertyMachine(Lock)...lock2=extras.PropertyMachine(Lock)...lock3=extras.PropertyMachine(Lock)......locks=['lock1','lock2','lock3']......defis_locked(self):...locks=[getattr(self,lock).is_lockedforlockinself.locks]...returnany(locks)......defis_open(self):...locks=[getattr(self,lock).is_openforlockinself.locks]...returnall(locks)>>>safe=Safe()>>>safe.lock1'locked'>>>safe.is_openFalse>>>safe.lock1.open()>>>safe.lock1.is_openTrue>>>safe.lock1'open'>>>safe.is_openFalse>>>safe.lock2.open()>>>safe.lock3='open'>>>safe.is_openTrue

历史记录

2.0.2(2017-03-13)

  • 对python>;3.4的固定要求。

2.0.1(2017-02-27)

  • 删除python的enum34>;3.4。
  • 增加了对Python2.6的支持。

2.0(2016-09-26)

  • 增加了力集方法。
  • 添加了现场机器。
  • 增加了对Python3.5的支持。

向后兼容性中断:

  • 空状态现在是不允许的。
  • 使用标量时,只允许使用全名,不允许使用快捷方式。
  • 删除了对不可更改类型的支持。

1.0(2014-09-04)

  • 添加了所有基本功能。

0.1.0(2014-08-08)

  • pypi上的第一个版本。
  • 添加了创建简单状态机的实用程序。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有字符串的java JNA调用与带有字节[]的java JNA调用的行为不同   java基于键列表获取子映射   重启后永久增加java堆大小?   JavaHTTPS服务器:相互SSL身份验证   java为什么接受接口的方法会拒绝该接口的实现?   片段中的java视图无法应用于()   ms access Java SQL更新命令不工作   java将web服务自动打包和部署到Oracle Application Server 10g   java有没有办法在安卓 studio中为安卓时钟设置多个警报?   位于FTP服务器上的文件上的Java校验和md5   在Java中创建类时遇到问题。有些方法不太确定   java错误:在类chrome\u驱动程序中找不到主方法   通用海图(Javascript\Java)