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

时间:2018-07-20 14:01:13

标签: python typing python-dataclasses

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

from dataclasses import dataclass
from typing import List

@dataclass
class Branch:
    tree: List[Branch]

错误:

NameError: name 'Branch' is not defined

1 个答案:

答案 0 :(得分:4)

在类型提示中使用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放在文件顶部以启用此新功能行为和您的原始代码即可。