假设我有:
x: type = Optional[str] # <--- type error
这会导致类型错误:
Expression of type "UnionType" is incompatible with declared type "type"
"UnionType" is incompatible with "type"
我不想输入 annotate
x
with
typing.UnionType
,因为一般来说它可以是任何注释。例如:
x: ? = NamedTuple
x: ? = MyClass
x: ? = str
x: ? = Any
我写下的任何内容
?
都应该适用于广泛的类型注释。除了
Any
之外我还有什么好的选择吗?
可以使用
typing.Type
对存储类型注释的变量进行类型注释。
例如:
from typing import Type, Optional, NamedTuple, Any
# 存储 Optional[str] 类型
x: Type = Optional[str]
# 存储 NamedTuple 类型
y: Type = NamedTuple
# 存储 MyClass 类型
class MyClass: pass
z: Type[MyClass] = MyClass
# 存储 str 类型
a: Type[str] = str
# 存储 Any 类型
b: Type = Any
解释:
-
typing.Type
表示一个类型对象,可以用来表示任何类型。 -
当你想要存储一个具体类型的类型注释时,例如
str
,你需要使用Type[str]
。 -
对于
Optional
,NamedTuple
和Any
这样的类型,可以直接使用Type
。
需要注意的是,
Type[<具体类型>]
语法在 Python 3.9 及以上版本中可用。如果你使用的是旧版本的 Python,你需要使用
typing.Type
并结合类型注释来实现相同的效果。