首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Helang开源,谈谈其中的状态机部分

Helang开源,谈谈其中的状态机部分

作者头像
kifuan
发布2022-10-24 16:55:36
发布2022-10-24 16:55:36
28500
代码可运行
举报
文章被收录于专栏:随便写写-kifuan随便写写-kifuan
运行总次数:0
代码可运行

链接

没想到不少人能摸到我的博客地址,哈哈哈,引了一波。

Github仓库:https://github.com/kifuan/helang

状态机

我自己写了一个绑定枚举值和方法的小工具,挺好玩的。源码很短,就下面这几行:

代码语言:javascript
代码运行次数:0
运行
复制
from enum import Enum


class Methods:
    def __init__(self):
        self._methods = dict()

    def bind(self, enum: Enum):
        def bind_method(method: callable):
            self._methods[enum] = method
            return method
        return bind_method

    def apply(self, enum: Enum, *args, **kwargs):
        return self._methods[enum](*args, **kwargs)

之后用的时候可以这样用:

代码语言:javascript
代码运行次数:0
运行
复制
methods = Methods()

class State(Enum):
    A = 1
    B = 2

class Foo:
    def __init__(self):
        self._state = State.A
        self._end = False

    def start(self):
        while not self._end:
            methods.apply(self._state, self)

    @methods.bind(State.A)
    def _state_a(self):
        print('State A')
        self._state = State.B

    @methods.bind(State.B)
    def _state_b(self):
        print('State B')
        # End of running.
        self._end = True

foo = Foo()
foo.start()

运行结果:

代码语言:javascript
代码运行次数:0
运行
复制
State A
State B
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 链接
  • 状态机
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档