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

如何在Python中创建带自引用类型提示的递归dataclass

Python dataclass 自引用类型标注解决方案

注意:原示例中[Category]的写法不符合Python类型标注规范,列表类型标注统一使用list[元素类型](Python 3.9+)或typing.List[元素类型](Python 3.9及以下)的形式。

解法1:Python 3.7+ 启用延迟标注求值

  • 在文件顶部导入from __future__ import annotations,Python会延迟所有类型标注的解析时机,直到整个模块加载完成,类内部就可以直接引用自身。
  • 代码示例:
from __future__ import annotations
from dataclasses import dataclass

@dataclass
class Category:
    title: str
    children: list[Category]

tree = Category(title='title 1', children=[
    Category('title 11', children=[]),
    Category('title 12', children=[])
])

解法2:字符串字面量标注(兼容所有Python 3版本)

  • 把自引用的类名用引号包裹为字符串形式,类型检查工具会自动匹配到对应的类,不需要额外导入。
  • 代码示例:
from dataclasses import dataclass
from typing import List # Python 3.9+可省略该行,直接用list代替List

@dataclass
class Category:
    title: str
    children: List["Category"]

解法3:Python 3.11+ 使用typing.Self(最简洁)

  • 3.11及以上版本可以直接使用Self类型,自动指向当前定义的类,后续修改类名时不需要同步修改类型标注。
  • 代码示例:
from dataclasses import dataclass
from typing import Self

@dataclass
class Category:
    title: str
    children: list[Self]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:36:00