【问题标题】: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 放在文件顶部以启用此新行为和您原来的行为代码将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多