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
transitions--状态机控制
最新推荐文章于 2024-07-24 23:49:50 发布