【问题标题】:Reference class type in dataclass definition数据类定义中的引用类类型
【发布时间】:2018-07-20 14:01:13
【问题描述】:
是否可以在类定义中引用当前正在定义的类?
from dataclasses import dataclass
from typing import List
@dataclass
class Branch:
tree: List[Branch]
错误:
NameError: name 'Branch' is not defined
【问题讨论】:
标签:
python
typing
python-dataclasses
【解决方案1】:
当您在类型提示中使用 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 放在文件顶部以启用此新行为和您原来的行为代码将起作用。