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

Jac*_*kes 4 python typing python-dataclasses

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

from dataclasses import dataclass
from typing import List

@dataclass
class Branch:
    tree: List[Branch]
Run Code Online (Sandbox Code Playgroud)

错误:

NameError: name 'Branch' is not defined
Run Code Online (Sandbox Code Playgroud)

FHT*_*ell 7

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

class T:
   t = T()
Run Code Online (Sandbox Code Playgroud)

您可以通过将其放入像这样的字符串文字来延迟评估

from dataclasses import dataclass
from typing import List

@dataclass
class Branch:
    tree: List['Branch']
Run Code Online (Sandbox Code Playgroud)

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