我真的不明白这个问题。设计模式非常清晰。请参阅Design Patterns book。class SuperState( object ):

def someStatefulMethod( self ):

raise NotImplementedError()

def transitionRule( self, input ):

raise NotImplementedError()

class SomeState( SuperState ):

def someStatefulMethod( self ):

actually do something()

def transitionRule( self, input ):

return NextState()

这是非常普通的样板,用于爪哇、C++、Python(我也肯定其他语言)。

如果您的状态转换规则碰巧是微不足道的,那么有一些优化可以将转换规则本身推送到超类中。

注意,我们需要有前向引用,所以我们按名称引用类,并使用eval将类名转换为实际的类。另一种方法是生成转换规则实例变量而不是类变量,然后在定义所有类之后创建实例。class State( object ):

def transitionRule( self, input ):

return eval(self.map[input])()

class S1( State ):

map = { "input": "S2", "other": "S3" }

pass # Overrides to state-specific methods

class S2( State ):

map = { "foo": "S1", "bar": "S2" }

class S3( State ):

map = { "quux": "S1" }

在某些情况下,您的事件不像测试对象的相等性那么简单,因此更一般的转换规则是使用正确的函数-对象对列表。class State( object ):

def transitionRule( self, input ):

next_states = [ s for f,s in self.map if f(input) ]

assert len(next_states) >= 1, "faulty transition rule"

return eval(next_states[0])()

class S1( State ):

map = [ (lambda x: x == "input", "S2"), (lambda x: x == "other", "S3" ) ]

class S2( State ):

map = [ (lambda x: "bar" <= x <= "foo", "S3"), (lambda x: True, "S1") ]

由于规则是按顺序计算的,因此允许使用“默认”规则。

状态机 python_Python状态机设计相关推荐

  1. Verilog实现状态机与状态机经典示例——序列检测器、自动饮料售卖机

    原文链接:https://blog.csdn.net/qq_34070723/article/details/100737225 作者:King阿金 目录 1.状态机原理与三段式状态机 2.状态机示例 ...

  2. 数字IC笔面基础,师傅领进门,修行靠个人——人人心中都有一个状态机(状态机简介及Verilog模板)

    师傅领进门,修行靠个人(状态机) 写在前面的话 状态机简介 状态机类型 一段.两端还是三段? 状态机的Coding Style要求: 几点规则: 什么是一段.两段.三段? 一段.两段.三段优缺点 Ve ...

  3. 【iCore4 双核心板_FPGA】例程七:状态机实验——状态机使用

    实验现象: 按键每按下一次,三色LED改变一次状态. 核心代码: //--------------------module_rst_n---------------------------// mod ...

  4. Python什么是状态机,状态机的简单应用

    状态机是由两种或多种状态组成的,每一个状态有着对应的功能.状态机使用会让我们的代码简洁,逻辑清晰,条件判断难以实现的问题我们就可以实现,例如我们像完成这样的效果. 我们通过每次画不同的字符串来做出这样 ...

  5. MBSE建模学习之六:状态机和状态机图

    学习和应用基于模型的系统工程(MBSE)技术,离不开软件工具的支持.可在www.zhiruisiwei.com网站服务页面下载中文版.国产化的MBSE建模软件工具:智睿思维基于模型的系统工程软件(MB ...

  6. 算法设计与分析python_Python算法设计与分析

    内容提要 本书内容包括算法初步.排序算法.查找.双指针问题.哈希算法.深度优先搜索算法.广度优先搜索算法.回溯算法.动态规划.贪心算法.分治算法.并查集.最短路径算法和数论算法等常见算法.每个算法都做 ...

  7. python 状态机_Python 状态机

    class StateMachine: def __init__(self): self.handlers = {} # 状态转移函数字典 self.startState = None # 初始状态 ...

  8. FPGA之道(54)状态机的设计

    文章目录 前言 状态机的设计 状态浅析 真正的状态 抽象的状态与中间变量 抽象状态的设计方法 抽象状态与中间变量的权衡 基本状态介绍 初始态 结束态 中继态 分支态 复位态 空闲态 多余态 状态的一些 ...

  9. 状态机设计的一般步骤_浅谈状态机

    来源:公众号[ZYNQ]ID   :FreeZynq 整理 :李肖遥 本文目录 前言 状态机简介 状态机分类 Mealy 型状态机 Moore 型状态机 状态机描述 一段式状态机 二段式状态机 三段式 ...

最新文章

  1. jquery each
  2. 一行预处理代码,让你的CV模型更强!Google出品
  3. java 内部类深度剖析
  4. ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)、chr(.. 以及oracle中使用chr
  5. sqlserver 事务例子
  6. gulp 和npm_为什么我离开Gulp和Grunt去看npm脚本
  7. Jmeter分布式测试过程中遇到的问题及摘抄前辈问题汇总
  8. 《MFC初探》之变量类型
  9. 测试学开发——第一课:环境搭建与页面开发介绍。
  10. mysql a锁_MYSQL中的锁
  11. .net5 和 .net6 部署到 IIS 完整步骤
  12. 高等数学(第七版)同济大学 习题7-5 个人解答
  13. 比较指令-汇编码分析
  14. 计算机《画图》教案学生状态,《初识“画图”》教案设计.doc
  15. python小论文范文3000字_论文范文3000字
  16. python调用百度AI识别文字和表格
  17. ImageJ对荧光信号离散的细胞计数方法
  18. 南京市shp矢量数据wgs84坐标系包含区划路网水系poi功能区等类型
  19. Yolov5(1):Detect源码逐行解析
  20. “谷底”类题目及一些自己的思考

热门文章

  1. 小区物业费信息管理系统设计c++_没有入住需要交物业费吗?有没有办法不交物业费呢?法律专家解读...
  2. 基于tensorflow2.0实现猫狗大战(搭建网络迁移学习)
  3. ROS2学习(十三).ROS概念 - ROS结构(Composition)
  4. mysql中存储日期的类型_选择合适的 MySQL 日期时间类型来存储你的时间
  5. java系统系统异常处理,银行系统(Java)异常处理
  6. PAT_B_1073_C++(20分)
  7. *PAT_B_1014_Java(20分)
  8. centos 查找nginx_centos7肿么查看已经安装nginx
  9. Codeforce1311B. WeirdSort (冒泡排序)
  10. 数学--数论--HDU - 6322 打表找规律