Python transitions(状态机)模块学习笔记


实验设计:

模拟水(h2o)的三种状态[固态(solid),液态(liquid),气态(gas)]的相互转换

实现功能:

  1. 初始化时可以设定初始状态(温度),根据温度自动设置初始状态
  2. 对外提供两个方法:加热(heat)和冷却(cool),可以出发状态转换
  3. 每次加热和冷却的温度可以动态设置,只有满足状态转换条件才发生状态转换

代码实践:

基础——简单状态转换

直接调用触发器,触发状态变换,不进行逻辑判断

实现步骤:

  1. 创建一个类实例(h2o)
  2. 创建状态列表(states)
  3. 创建状态转换器列表(transitions)
  4. 创建状态机实例(machine)
  5. 调用状态转换器触发状态转换

代码示例:

from transitions import Machine

class H2o(object):
    pass

h2o = H2o()

states=['solid', 'liquid', 'gas']

transitions = [
    {
   'trigger': 'melt', 'source': 'solid', 'dest': 'liquid'},
    {
   'trigger': 'evaporate', 'source': 'liquid', 'dest': 'gas'},
    {
   'trigger': 'sublimate', 'source': 'solid', 'dest': 'gas'}
]

machine = Machine(h2o, states=states, transitions=transitions, initial='liquid')

print(h2o.state)
print(h2o.evaporate())
print(h2o.state)

进阶——条件转换

引入温度Temp变量,对外暴露加热(heat)和冷却(cool)接口,当温度变化后达到状态变化条件时才触发状态变换
实现思路:

  1. 在H2o中增加属性temp,用户维护温度信息
  2. 状态转换器不对外暴露,外部不能直接触发状态转换
  3. 对外暴露的接口为加热(heat)和冷却(cool),通过事后温度触发状态转换
  4. 状态定义:{‘gas’: <=0, ‘liquid’: (0,100], ‘gas’: >100}

代码示例:

import random
from transitions import Machine

class H2o(object):

    def __init__(self, initTemp=10):
        self.temp = initTemp
        if s
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值