用python表示状态机的一种更方便简洁的方法

pytomaton的Python项目详细描述


pytomaton:python中的状态机
=


brief
----
通常,状态机是实现有状态协议的一种方便方法,但是
它们通常包含许多混乱的样板文件,用于管理如何从一个状态转换到下一个状态,或者当您进入一个状态时究竟发生了什么。
“pytomaton”是创建的以减少这个样板代码。

正如在理论自动机中一样,“pytomaton.statemachine”有一个
状态列表,即开始状态。在任何给定时间,状态机都处于一个
状态。程序员可以调用“state machine.transition(new_state_name)”来
转换到一个新状态;当发生这种情况时,状态机将检查是否有任何由该转换触发的操作。当前,可以通过输入特定状态(`on_enter`)或将
从一个特定状态转换到另一个特定状态(`on_transition`)来触发操作
。方法被修饰为由转换触发的
,如下例所示。

example
----


='等待连接'

def on_connect(self):
self.transition('waiting_for_ready')

@on_transition('waiting_for_connection','waiting_for_ready')
def send_ready_prompt(self):
self.broadcast('Are you ready?')

def receive_ready_confirm(self):
如果是self.all_ready():
self.transition('all_ready')

@on_enter('all_ready')
def send_all_ready(self):
self.broadcast('everyone is ready!')

在本例中,我们定义了一个具有三种状态的“connectionmachine”。它以“等待连接”状态启动。当用户连接时,in
将转换到“waiting_for_ready”状态,这将触发对
“send_ready_prompt”的调用。当用户确认准备就绪时,我们将转换到
“on_ready”状态,这将触发调用“send_all_ready”。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
当使用RequestDispatcher时,servlets Java最终没有被调用   java生成对具有可变参数数的方法的调用   java如何使用select子句中的参数化列映射iBATIS的查询?   java无法创建类型为org的插件。阿帕奇。登录中。log4j。果心阿佩德。元素RollingFile的RollingFileAppender   java当子实体和父实体之间存在OneTONE JPA关系时,是否可以将其与父实体一起持久化?   Android上的java Facebook集成fbconnect断开链接   获取方法调用方的java机制   从列表创建Oracle阵列时出现java问题   添加和检索元素的ArrayList的java ArrayList   在java中从字符串中删除无效的XML字符   java如何构建完整生成的maven模块   java如何准确地改变播放所有分辨率midi文件的速度?   shell javac:无效标志:/src/中位_度。ubuntu中的java   java使用从其他类的方法检索到的信息