一方面,我了解到可以是
int
或 float
的数字应将类型注释为 float
(来源:PEP 484 类型提示 和 这个 stackoverflow 问题):
def add(a: float, b: float):
return a + b
另一方面,
int
不是 float
的实例:
issubclass(int, float)
返回False
isinstance(42, float)
返回False
因此,我希望
Union[int, float]
是此用例的正确注释。
问题:
int
/float
是类型注释中的特殊情况吗?还有其他类似的例子吗?Union[float, int]
?
- int/float 是类型注释中的特例吗?
float
是一个特例。 int
不是。 PEP 484 在下面的段落中说,您的问题中的链接引用了这一段落:
当参数被注释为具有类型
时,可接受类型float
的参数;int
因此,接受
int
(其中 float
已注释)显然是一种特殊情况,与注释通常处理类层次结构的方式无关。
还有其他类似的例子吗?
是的,至少还有一种特殊情况。 在同一段落中,PEP 484 继续说道:
对于注释为类型
的参数,complex
或float
类型的参数是可接受的。int
- 如果这是意外使用,是否有任何 linter 会警告我
?Union[float, int]
Union[float, int]
完全没问题。
对
float
注释的特殊处理只是一种方便(PEP 484 称之为“快捷方式”),让人们避免写出冗长的 Union[float, int]
注释,因为参数可以是 float
或int
很常见。