python学习笔记6.8-类的状态机

说起状态机,很多人可能就要不屑一顾了,无非就是switch case语句嘛,或者是if … else if … else 语句嘛,这一类程序员写的状态机只能说实现了功能,而在代码的优越性来看,简直就是不忍直视。对于面向对象的编程语言,例如python,最直观的方式就是利用类来表达状态,从而达到状态机的实现。 状态机的基本要素就是状态相应和状态转移,直接上代码吧。

'''
------------------------------
Author      : Aleb           |
Time        : 2017-1-13      |
verision    :1.0             |
description : FSM            |
------------------------------
'''

print(__doc__)


class State:
    def __init__(self):
        self.NewState(StateStart)

    def NewState(self, state):
        self.__class__ = state

    def Action(self):
        raise NotImplementedError()


class StateStart(State):
    def Action(self):
        print('StateStart is running')

        self.NewState(StateTask1)


class StateTask1(State):

    def Action(self):
        print('StateTask1 is running')
        # conditon for state transfer
        self.NewState(StateTask2)


class StateTask2(State):

    def Action(self):
        print('StateTask2 is running')
        self.NewState(StateEnd)


class StateEnd(State):

    def Action(self):
        print('StateEnd is running')
        self.NewState(StateStart)


c = State()
print(c.NewState)

c.Action()
c.Action()
c.Action()
c.Action()
c.Action()

从代码来看非常的简单,在state中直接修改实例的class属性(虽然说面向对象编程不太推荐这么做,但是从技术上来说是可行的,而且运行速度比较快,唯一的确定就是太暴力)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏更流畅、简洁的软件开发方式

【自然框架】QuickPagerSQL——专门生成分页用的SQL的类库

   分享一个生成分页用SQL的函数库   一般一提到分页,大家就会想到存储过程,而大多数情况都是在存储过程里面拼接SQL,我觉得与其在存储过程里面拼接,还不如...

2315
来自专栏菩提树下的杨过

重温delphi之:如何将Bitmap位图与base64字符串相互转换

先引用delphi自带的单元 uses EncdDecd; 然后就可以使用下面二个函数了: by 菩提树下的杨过 http://yjmyzz.cnblogs.c...

19010
来自专栏你不就像风一样

Jsoup+FastJson制作新闻数据接口-Demo

经常用到 编写出来直接拿来用 这个适合在服务端结合servlet来做接口:需要下载jsoup+fastjson两个包 Jsoup使用手册:http:/...

592
来自专栏逸鹏说道

sql server实现自定义分割月功能

本文目录列表: 1、为何出现自定义分割月需求 2、sql server实现自定义分割月功能 3、测试验证效果 4、总结语 5、参考清单列表 1、为何出现自定义分...

3246
来自专栏跟着阿笨一起玩NET

动态调用WebService

http://linglong117.blog.163.com/blog/static/277145472009127514463/

391
来自专栏大内老A

在Entity Framework中使用存储过程(三):逻辑删除的实现与自增长列值返回

本篇文章通过实例的方式,讨论两个在EF使用存储过程的主题:如何通过实体和存储过程的映射实现逻辑删除;对于具有自增长类型主键的数据表,在进行添加操作的时候如何将正...

1867
来自专栏不想当开发的产品不是好测试

优化testng报告

背景 搞过testng的同学都知道,testng自带的报告非常丑,而且有些字段的展示很不人性化,所以需要优化下报告 ? 解决方案 尝试过一下开源的jar包,如R...

1967
来自专栏吴老师移动开发

[Flutter]请求阿里百川的API

简单封装了一下,请求阿里百川的api。只是做了一个简单的get请求封装,要更加优雅可以自己再封装一下。

784
来自专栏学习力

《Java从入门到放弃》框架入门篇:hibernate查询——HQL

1697
来自专栏编程

JMeter,判断字符串是否存在该集合

在学习 JMeter 的 JDBC 模块中,遇到了 ArrayList 和 String 的之间需要对比的问题,折腾我一周时间了。这个问题如果用代码解决的话,一...

18910

扫码关注云+社区