transitions--状态机控制

from enum import Enum
from transitions import Machine


class OrderState(Enum):
    PENDING = 'pending'
    CONFIRMED = 'confirmed'
    COMPLETED = 'completed'


class Order(object):
    # 定义状态转移规则
    transitions = [
        {'trigger': 'confirm', 'source': OrderState.PENDING, 'dest': OrderState.CONFIRMED, 'conditions': 'can_confirm'},
        {'trigger': 'complete', 'source': OrderState.CONFIRMED, 'dest': OrderState.COMPLETED,
         'conditions': 'can_complete'},
    ]

    def __init__(self):
        self.state = OrderState.PENDING
        # 创建状态机,指定模型、状态列表和转换规则
        self.machine = Machine(model=self, states=list(OrderState), transitions=Order.transitions,
                               initial=OrderState.PENDING, send_event=True)

    def can_confirm(self, event_data):
        # 检查当前状态是否为待确认状态
        print('checking confirmation eligibility, current state is', self.state)
        return self.state == OrderState.PENDING

    def can_complete(self, event_data):
        # 检查当前状态是否为已确认状态
        print('checking confirmation eligibility, current state is', self.state)
        return self.state == OrderState.CONFIRMED

    def on_confirm(self, event_data):
        print('Order confirmed')
        # 对订单进行确认操作
        self.confirm()

    def on_complete(self, event_data):
        print('Order completed')
        # 对订单进行完成操作
        self.complete()


# 创建一个订单对象
order = Order()

# 查看订单初始状态
print('初始状态', order.state.value)  # OrderState.PENDING

# 尝试将订单从待确认状态转移到已完成状态,会失败
order.complete()
print(order.state.value)  # OrderState.PENDING

# 将订单从待确认状态转移到已确认状态
order.confirm()
print(order.state.value)  # OrderState.CONFIRMED

# 将订单从已确认状态转移到已完成状态
order.complete()
print(order.state.value)  # OrderState.COMPLETED

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值