我想在创建数据类时使用Union
和Optional
类型。
我可以安全使用这些类型吗?
例如:
@dataclass
class Car:
year: int
owner: Optional[str]
engine: Union[Engine1, Engine2]
答案 0 :(得分:3)
可以。首先,python中的注释本身不会做任何事情。从其他语言中,您可能希望将变量声明为int
会导致错误(如果实例化为例如字符串),但在python中并非如此。
注释仅由第三方库或工具使用,例如在IDE给您提示时使用您的IDE,或在对代码进行静态类型分析时使用mypy
。
因此,您应该使用一种可以与您的工具配合使用的注释,根据我的个人经验,这将意味着在基本类型上使用typing
模块中的类型注释。
虽然没有关于您必须使用的声明性声明,here is a thread讨论了默认数据类类型,包括ericvsmith(dataclasses模块的作者)和gvanrossum(python的作者),并且他们同意typing.Any
胜过object
。
我假设数据类文档使用基本的python类型,以便不会给读者带来太多的知识负担。毕竟,您可以使用数据类就好了,而无需了解任何typing
模块,一旦对数据类的工作方式感到满意,您可能会遇到并欣赏使用typing
的附加功能的注释。