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

pyn*_*sta 5 python-3.x python-dataclasses

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

例如:

@dataclass
class Car:
    year: int
    owner: Optional[str]
    engine: Union[Engine1, Engine2]
Run Code Online (Sandbox Code Playgroud)

Arn*_*rne 4

是的你可以。首先,Python 中的注释本身并不执行任何操作。在其他语言中,您可能会期望将变量声明为(int例如,字符串)实例化时会导致错误,但在 python 中并非如此。

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

因此,您应该使用一种与您的工具配合良好的注释,根据我的个人经验,这意味着使用模块中的类型注释typing而不是基本类型。


虽然没有关于必须使用什么的声明性声明,但这里有一个讨论默认数据类类型的线程,包括 ericvsmith(dataclasses 模块的作者)和 gvanrossum(python 的作者),他们同意应该typing.Any优先使用object.

我假设数据类文档使用基本的 python 类型,以免给读者带来太多的知识负担。毕竟,您可以很好地使用数据类typing,而无需了解有关模块的任何信息,一旦您熟悉了数据类的工作方式,您可能会遇到并欣赏使用typing's 注释的额外功能。