如何将dataclass属性注解为另一个dataclass对象?

gpfsuwkq  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(353)

我有两个数据类,如:

from dataclasses import dataclass
from pathlib import Path

@dataclass
class InnerDataClass:
    host: str

@dataclass
class OuterDataClass:
    directory: Path
    host: InnerDataClass

当我打电话时 OuterDataClass(...) ,python返回错误 NameError: name 'InnerDataClass' is not defined 在最后一行。它为什么会这样做?我如何解决它?

nzrxty8p

nzrxty8p1#

您的示例实际上是可行的,在实际代码中,类的顺序可能正好相反。python代码文件逐行执行,因此当第一个类的类主体被执行时,第二个类需要已经存在。如果您希望工作正常,则必须按照与内部层次结构从下到上匹配的顺序声明类。
但是,如果您所做的只是注解,而不是实际创建示例,那么您也可以这样做:

from __future__ import annotations

from dataclasses import dataclass
from pathlib import Path

@dataclass
class OuterDataClass:
    directory: Path
    host: InnerDataClass

@dataclass
class InnerDataClass:
    host: str

跑步 from __future__ import annotations 因为代码文件的第一行将使注解工作,而不管中定义了什么顺序类。它作为pep 563引入是为了帮助循环依赖。

相关问题