python - 数据类定义中的引用类类型

标签 python typing python-dataclasses

是否可以在类定义中引用当前正在定义的类?

from dataclasses import dataclass
from typing import List

@dataclass
class Branch:
    tree: List[Branch]

错误:

NameError: name 'Branch' is not defined

最佳答案

当您在类型提示中使用 Branch 时,您尚未完成定义,因此解释器会抛出 NameError。这与这不起作用的原因相同:

class T:
   t = T()

您可以像这样将它放在字符串文字中来延迟评估

from dataclasses import dataclass
from typing import List

@dataclass
class Branch:
    tree: List['Branch']

这在原始规范中实际上被认为是一个错误的决定,并且 there are moves还原它。如果您使用的是 Python 3.7(我猜您是因为您使用的是 dataclasses,尽管它在 PyPI 上可用),您可以将 from __future__ import annotations 放在文件的顶部以启用此新行为,您的原始代码将起作用。

关于python - 数据类定义中的引用类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51444260/

相关文章:

python - 来自数据框组的条形图

Python提取关键字和括号后的文本

Python 仅在 for 循环未开始迭代(使用生成器)时才执行代码?

c# - 为什么 Java、C# 和 C++ 没有范围?

Python 键入 : Given Set of Values

python - 什么是数据类,它们与普通类有何不同?

python - 使用 Dask DataFrame 计算前向差异?

haskell - 在 Haskell 中使用数据类型

python - 我可以在数据类中有一个在转换为 dict 时省略的可选参数吗?

python - Pickle 忽略带槽的卡住数据类上的 __getstate__