创建数据类时,可以使用类型模块中的Union和Optional类型吗?

时间:2019-04-02 10:17:35

标签: python-3.x python-dataclasses

我想在创建数据类时使用UnionOptional类型。 我可以安全使用这些类型吗?

例如:

@dataclass
class Car:
    year: int
    owner: Optional[str]
    engine: Union[Engine1, Engine2]

1 个答案:

答案 0 :(得分:3)

可以。首先,python中的注释本身不会做任何事情。从其他语言中,您可能希望将变量声明为int会导致错误(如果实例化为例如字符串),但在python中并非如此。

注释仅由第三方库或工具使用,例如在IDE给您提示时使用您的IDE,或在对代码进行静态类型分析时使用mypy

因此,您应该使用一种可以与您的工具配合使用的注释,根据我的个人经验,这将意味着在基本类型上使用typing模块中的类型注释。


虽然没有关于您必须使用的声明性声明,here is a thread讨论了默认数据类类型,包括ericvsmith(dataclasses模块的作者)和gvanrossum(python的作者),并且他们同意typing.Any胜过object

我假设数据类文档使用基本的python类型,以便不会给读者带来太多的知识负担。毕竟,您可以使用数据类就好了,而无需了解任何typing模块,一旦对数据类的工作方式感到满意,您可能会遇到并欣赏使用typing的附加功能的注释。