6

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

例如:

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

1 回答 1

3

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

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

因此,您应该使用一种您的工具可以很好地使用的注释,并且根据我的个人经验,这意味着使用typing模块中的类型注释而不是基本类型。


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

我假设数据类文档使用基本的 python 类型,以免给读者带来太多的知识负担。毕竟,您可以很好地使用数据类,而无需对模块一无所知typing,一旦您对数据类的工作方式感到满意,您可能会遇到并欣赏使用typing' 注释的额外功能。

于 2019-04-05T10:07:29.863 回答