You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pytransitions 0.8+版本中正确使用Nested states的方法是什么

pytransitions多层嵌套状态(macro-state)实现说明

结论

pytransitions 0.8及以上版本原生支持多层嵌套的macro-state,完全可以实现你描述的层级结构,无需强制使用旧版本的兼容工作流。

核心实现逻辑

pytransitions的状态定义支持通过children字段为任意状态添加子状态,嵌套层级没有限制,你描述的「蓝色父状态包含两个子状态,其中绿色子状态本身也是包含内部状态的macro-state」结构可以直接通过多层嵌套的状态配置实现。

示例代码

from transitions import Machine

# 定义状态结构,完全匹配你要求的层级
states = [
    "standby", # 示例根状态
    # 蓝色macro-state(父状态)
    {
        "name": "blue_block",
        "children": [
            # 绿色macro-state(蓝色的子状态,本身也是父状态)
            {
                "name": "green_block",
                "children": ["green_sub1", "green_sub2"], # 绿色的两个内部状态
                "initial": "green_sub1" # 绿色状态的默认初始子状态
            },
            "blue_sub2" # 蓝色的第二个子状态
        ],
        "initial": "green_block" # 蓝色状态的默认初始子状态
    },
    "completed" # 示例根状态
]

# 定义状态转换规则,可根据需求自定义
transitions = [
    ["start", "standby", "blue_block"],
    ["switch_blue_sub", "blue_block_green_block", "blue_block_blue_sub2"],
    ["switch_green_sub", "blue_block_green_block_green_sub1", "blue_block_green_block_green_sub2"],
    ["finish", "blue_block", "completed"]
]

# 实例化状态机
class StateMachineDemo:
    pass

demo = StateMachineDemo()
machine = Machine(demo, states=states, transitions=transitions, initial="standby")

# 测试运行
demo.start()
print(demo.state) # 输出 blue_block_green_block_green_sub1
demo.switch_green_sub()
print(demo.state) # 输出 blue_block_green_block_green_sub2
demo.switch_blue_sub()
print(demo.state) # 输出 blue_block_blue_sub2

补充说明

  • 嵌套状态的完整状态名默认会按照父状态名_子状态名的规则拼接,你也可以通过配置auto_transitions=False关闭自动生成的转换规则,完全自定义状态流转逻辑。
  • 所有嵌套状态都继承父状态的转换规则,符合分层状态机的标准语义。

内容的提问来源于stack exchange,提问作者Red Karibou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:39:02