创建数据类时,我可以使用 typing 模块中的 Union 和 Optional 类型吗?
Can I use the Union and Optional types from the typing module when creating a dataclass?
我想在创建数据类时使用 Union
和 Optional
类型。
我可以安全地使用这些类型吗?
例如:
@dataclass
class Car:
year: int
owner: Optional[str]
engine: Union[Engine1, Engine2]
是的,你可以。首先,python 中的注释本身不会做任何事情。在其他语言中,您可能认为将变量声明为 int
会导致错误,如果它被实例化为字符串,但在 python.[=19 中情况并非如此。 =]
注解仅供第三方库或工具使用,例如您的 IDE 当它给您提示时,或 mypy
当它对您的代码进行静态类型分析时。
所以你应该使用一种你的工具可以很好地工作的注释,根据我的个人经验,这意味着使用 typing
模块中的类型注释而不是基本类型。
虽然没有关于您必须使用什么的声明,here is a thread讨论了默认的数据类类型,包括 ericvsmith(数据类模块的作者)和 gvanrossum( python 的作者),他们同意 typing.Any
应该优于 object
。
我假设数据类文档使用基本的 python 类型,以免给 reader 带来太多的知识负担。毕竟,您可以在不了解 typing
模块的情况下很好地使用数据类,一旦您熟悉数据类的工作方式,您可能会 运行 并欣赏使用 typing
的注释。
我想在创建数据类时使用 Union
和 Optional
类型。
我可以安全地使用这些类型吗?
例如:
@dataclass
class Car:
year: int
owner: Optional[str]
engine: Union[Engine1, Engine2]
是的,你可以。首先,python 中的注释本身不会做任何事情。在其他语言中,您可能认为将变量声明为 int
会导致错误,如果它被实例化为字符串,但在 python.[=19 中情况并非如此。 =]
注解仅供第三方库或工具使用,例如您的 IDE 当它给您提示时,或 mypy
当它对您的代码进行静态类型分析时。
所以你应该使用一种你的工具可以很好地工作的注释,根据我的个人经验,这意味着使用 typing
模块中的类型注释而不是基本类型。
虽然没有关于您必须使用什么的声明,here is a thread讨论了默认的数据类类型,包括 ericvsmith(数据类模块的作者)和 gvanrossum( python 的作者),他们同意 typing.Any
应该优于 object
。
我假设数据类文档使用基本的 python 类型,以免给 reader 带来太多的知识负担。毕竟,您可以在不了解 typing
模块的情况下很好地使用数据类,一旦您熟悉数据类的工作方式,您可能会 运行 并欣赏使用 typing
的注释。