参考class type in dataclass定义
Reference class type in dataclass definition
是否可以引用当前在 class 定义中定义的 class?
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
放在文件的顶部启用此新行为,您的原始代码将起作用。
是否可以引用当前在 class 定义中定义的 class?
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
放在文件的顶部启用此新行为,您的原始代码将起作用。