我不太明白这个问题,State设计模式非常清楚。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()

这是非常常见的样板,用于Java、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. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

  2. python优化网站_[练习] 用PYTHON来优化网站中的图片

    我到公司以来,第一次加班,哇,加一晚上加一上午,现在还没下班的迹象,555,困. 对于网站中的一些关键的页面,多重缓存.静态化.程序代码优化--之外,为了提高用户打开页面的速度,图片是必须要优化的. ...

  3. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  4. 网易图灵学院python公开课_图灵学院 Python全系列教程全栈工程师 python视频教程下载...

    大家怎么说? 老师很好,我认为,若想学好python,应该多练.多想.多看.学习资料不能仅限于老师给定的这些内容,这些毕竟是入门资料 老师讲的真不错,对于我们这种小白来说 也比较容易懂,虽然有些时候自 ...

  5. python列表拆包_详解python 拆包可迭代数据如tuple, list

    详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...

  6. load python txt文件_详解Python中numpy.loadtxt()读取txt文件

    为了方便使用和记忆,有时候我们会把 numpy.loadtxt() 缩写成np.loadtxt() ,本篇文章主要讲解用它来读取txt文件. 读取txt文件我们通常使用 numpy 中的 loadtx ...

  7. 文科生自学python要多久_怎么自学python,大概要多久?

    都让开!本人文科生,自学Python 2年半,作为一个曾经完全0基础,啥都不懂纯靠自学学会python的文科生,有一些不成熟的小建议可以分享一下. 首先不要觉着编程难,只要你认识26个英文字母,有一点 ...

  8. python是什么编程教程-编程python是什么_谁的Python教程最好?

    谁的Python教程最好? 建议你可以看看这里的<Python基础教程>和<Python学习手册>应该适合你的. 希望对你有用. 记得采纳呀~ Python中的9个代码小实例! ...

  9. python什么环境_什么是Python?(基础环境建设),NO2,搭建

    1. Python语言 1.1 Python语言的基本概念 Python 是⼀种极少数能兼具 "简单" 与 "功能强⼤" 的编程语⾔.你将惊异于发现你正在使⽤的 ...

  10. python框架大全_常用的Python开源框架有哪些?列举这3个

    随着人工智能快速发展,不仅在各个领域应用日益广泛,同时也引发了教学内容的变革和创新.人工智能的火热得益于成功的开源以及深度学习框架的不断涌现.而Python作为一种脚本语言,具有易学.易维护等优点,它 ...

最新文章

  1. UNITY3D拓展编辑器 - 目录
  2. Vodafone A/B测试实践
  3. (转)Mac下MySql安装经历(含安装错误排查、卸载多种折腾)
  4. 【机器视觉】 serialize_measure算子
  5. 联想笔记本那些有手写功能_联想高端翻转本YOGA C940开启促销 配一体式转轴音响还可私人订制...
  6. ebook site
  7. php数据多层关联,php – 我们如何进行laravel多级关联
  8. 网络断网远程计算机会自动修复么,网络断网不怕,教你自己动手修复
  9. ngx_lua arg类型_使用模式,Arg和类型微调Drupal主题
  10. [算法课]算法课全题目解答及各周链接
  11. java openssl rsa_Java中使用OpenSSL生成的RSA公私钥进行数据加解密
  12. ESXI上检测磁盘状态
  13. 【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化
  14. 不同尺寸的手机屏幕其需要图片的分辨率和尺寸
  15. 这朵玫瑰叫Jenny
  16. ARM base instruction -- cmn
  17. 深入理解面向对象,面向对象3个特性7个原则6种关系
  18. css 小于10像素字体
  19. 【大医精诚】认识白细胞
  20. 你见过最赞或最搞笑字幕组翻译有哪些?

热门文章

  1. 修改Bootstrap的一些默认样式
  2. spring Quartz cron表达式
  3. Ubuntu 下vim中tab键变为4个空格
  4. python第三十二课——队列
  5. .Net Core中使用RabbitMQ
  6. 【转载】SVD在推荐系统中的应用
  7. 帝国cms调用相关文章若没有则调取最新文章
  8. 05 Diagnostics 诊断
  9. [NOI2013]快餐店
  10. LINUX下的tty,console与串口