使用自引用类型提示创建递归数据类

问题描述 投票:0回答:1

我想用 Python 编写数据类定义,但无法在声明中引用同一个类。

我主要想要实现的是这个嵌套结构的类型化,如下图:

 @dataclass
 class Category:
     title: str
     children: [Category] # I can't refer to a "Category"
  
 tree = Category(title='title 1', children=[
     Category('title 11', children=[]),
     Category('title 12', children=[])
 ])
python python-typing python-dataclasses recursive-datastructures
1个回答
35
投票

选项#1

您可以将类名包装在字符串中,以便前向声明注释:

from dataclasses import dataclass
from typing import List


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

选项#2

您可以包含

__future__
导入,以便默认情况下所有注释都是 前向声明,如下所示。在这种情况下,您还可以消除
typing
导入并在 Python 3.7 及更高版本中使用新样式注释。

from __future__ import annotations

from dataclasses import dataclass


@dataclass
class Category:
    title: str
    children: list[Category]
© www.soinside.com 2019 - 2024. All rights reserved.