python 我如何类型提示一个变量,其值本身就是一个类型提示?

iyfjxgzm  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(111)

我有一个函数,其中一个参数应该是类型提示:比如typing.Listtyping.List[int],甚至只是int。任何您合理期望看到的普通字段的类型注解。
这个参数的正确类型提示是什么?
(The我正在编写一个实用程序,它可以处理使用类型注解定义字段的类,有点像数据类装饰器。)

6mw9ycah

6mw9ycah1#

几乎完整但可读性较差的答案:

type | types.GenericAlias | types.UnionType | typing._BaseGenericAlias | typing._SpecialForm

字符串
以下是我能想到的所有类型的注解(在Python 3.10中):

  • 键入对象本身,例如intlist等。对应于type
  • Type hinting generics in standard collections,例如list[int]。对应于types.GenericAlias
  • 类型union,例如int | float(但typing.Union[int, float]不是,它对应于下一项)。对应于types.UnionType
  • typing中的通用具体集合,如typing.Listtyping.List[int]等。在这里,我选择了第一次出现在它们的继承链中的公共基类typing._BaseGenericAlias。(事实上,不仅是这些,typing中几乎所有的可下标注解类都继承自这个类,包括typing.Literal[True]typing.Union[int, float]等)
  • 打字中的特殊打字原语,如typing.Anytyping.NoReturn等。对应于typing._SpecialForm

需要注意的是,最后两个类型以单下划线开始,表示它们是内部类型,不应该从typing导入和使用。但是,如果您坚持要完全覆盖所有类型注解,它们应该是必不可少的。

相关问题