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

相关文章

来自专栏Java与Android技术栈

给 Java 和 Android 构建一个简单的响应式Local Cache

首先,Local Cache 不是类似于 Redis、Couchbase、Memcached 这样的分布式 Cache。Local Cache 适用于在单机环境...

862
来自专栏Flutter&Dart

DartVM服务器开发(第二十二天)--RestfulApi封装

阅读该文章之前,我会默认的认为你已经看过我之前的文章,并知道如何使用数据库,开启服务器等!

2263
来自专栏微信公众号:Java团长

Spring Boot属性配置和使用

Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置。

1301
来自专栏一个会写诗的程序员的博客

Spring Boot 使用 Kotlin Script Template 模板引擎kts 开发web

在 Spring Framework 5.0 M4 中引入了一个专门的Kotlin支持。

2212
来自专栏步履前行

@ModelAttribute 注解

最近用到了@ModelAttribute,就顺便学习下。  在方法级别使用时,比如 1 @ModelAttribute 2 public void add...

3207
来自专栏码匠的流水账

使用proguard混淆springboot代码

本文的proguard配置仅仅是根据自身工程的情况来量身定做的,不是通用的,具体的场景还需要根据具体情况对proguard参数进行调整。

5321
来自专栏Java成神之路

SpringMVC学习笔记

(1)通过 contextConfigLocation 来配置 SpringMVC 的配置文件

1074
来自专栏代码拾遗

​SpringMVC 教程 - Handler Method

由注解@RequestMapping注解修饰的处理请求的函数的签名非常的灵活,可以使用controller函数支持的一系列参数和返回值。

1141
来自专栏技术墨客

Spring核心——@Configuration与混合使用

在介绍Spring核心容器的系列文章中已经多次出现这个注解,从使用的角度来说可以把他理解为XML配置中的<beans>标签,但是两者肯定是不等价的。

1353
来自专栏cloudskyme

jbpm5.1介绍(6)

Junit测试的mini流程helloworld 这是一个在demo中使用的Script Task做的简单示例,在执行到这个任务结点的时候自动输出"hello...

3667

扫码关注云+社区

领取腾讯云代金券