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 条评论
登录 后参与评论

相关文章

来自专栏Java3y

【Java】几道让你拿offer的面试题

之前在刷博客的时候,发现一些写得比较好的博客都会默默收藏起来。最近在查阅补漏,有的知识点比较重要的,但是在之前的博客中还没有写到,于是趁着闲整理一下。

1000
来自专栏雪胖纸的玩蛇日常

老男孩Python全栈开发(92天全)视频教程 自学笔记04

1535
来自专栏Golang语言社区

编写地道的Go代码

最地道的Go代码就是Go的标准库的代码,有空的时候可以多看看Google的工程师是如何实现的。 1. 注释 可以通过/* ... */或者//增加注释, //之...

2766
来自专栏码云1024

FileOutputStream&FileInputStream&异常的使用

3207
来自专栏小俊博客

Nginx的location规则迷之匹配

Nginx,一个改变世界的软件,其作者是一个俄罗斯人,俗称毛子,在国人的印象中,是一群晚饭后牵着大灰熊在小区楼下散步的彪汉。能写出这般顺滑的软件,可谓是心有猛虎...

2602
来自专栏飞雪无情的博客

Android中关于线程使用的几点注意事项

我们都知道Android是单线程模型,这意味着Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,所以你单纯的new一个Thrad并且st...

653
来自专栏三丰SanFeng

无锁编程(三) - 忙等待

概念 忙等待可以认为是一种特殊的忙等待 忙等待分类 Peterson算法 xchg解法 TSL解法 自旋锁 Peterson算法 Peterson算法是一个实现...

2256
来自专栏大史住在大前端

野生前端的数据结构基础练习(2)——队列

循环队列书中并没有提及,它是一种特殊的队列。简单理解就是将基本队列只当做存储结构,而使用front和rear两个指针分别代表队列的头和尾,实际对外表现的队列是f...

1393
来自专栏余林丰

JUnit学习

很早以前就知道JUnit也知道它用来做单元测试。今天突然又想到还是要学一下这个JUnit,不然说出去不知道怎么用JUnit做单元测试……作为一个程序员怪丢人的。...

1835
来自专栏owent

Boost.Spirit 初体验

使用代码生成代码是一件十分美妙的事情,于是有了各种代码生成器。但是生成代码,意味着要有对生成规则的分析和处理。 Boost.Spirit 就是这么一个语法分析...

891

扫码关注云+社区