我有一个函数,其中一个参数应该是类型提示:比如typing.List或typing.List[int],甚至只是int。任何您合理期望看到的普通字段的类型注解。这个参数的正确类型提示是什么?(The我正在编写一个实用程序,它可以处理使用类型注解定义字段的类,有点像数据类装饰器。)
typing.List
typing.List[int]
int
6mw9ycah1#
几乎完整但可读性较差的答案:
type | types.GenericAlias | types.UnionType | typing._BaseGenericAlias | typing._SpecialForm
字符串以下是我能想到的所有类型的注解(在Python 3.10中):
list
type
list[int]
types.GenericAlias
int | float
typing.Union[int, float]
types.UnionType
typing
typing._BaseGenericAlias
typing.Literal[True]
typing.Any
typing.NoReturn
typing._SpecialForm
需要注意的是,最后两个类型以单下划线开始,表示它们是内部类型,不应该从typing导入和使用。但是,如果您坚持要完全覆盖所有类型注解,它们应该是必不可少的。
1条答案
按热度按时间6mw9ycah1#
几乎完整但可读性较差的答案:
字符串
以下是我能想到的所有类型的注解(在Python 3.10中):
int
、list
等。对应于type
。list[int]
。对应于types.GenericAlias
。int | float
(但typing.Union[int, float]
不是,它对应于下一项)。对应于types.UnionType
。typing
中的通用具体集合,如typing.List
、typing.List[int]
等。在这里,我选择了第一次出现在它们的继承链中的公共基类typing._BaseGenericAlias
。(事实上,不仅是这些,typing
中几乎所有的可下标注解类都继承自这个类,包括typing.Literal[True]
、typing.Union[int, float]
等)typing.Any
、typing.NoReturn
等。对应于typing._SpecialForm
。需要注意的是,最后两个类型以单下划线开始,表示它们是内部类型,不应该从
typing
导入和使用。但是,如果您坚持要完全覆盖所有类型注解,它们应该是必不可少的。