为什么在需要str和float时不将bool和int视为类型错误?

时间:2019-05-12 13:27:13

标签: python type-hinting

在使用mypypyre-check检查以下代码的类型错误时,都不会产生错误:

SSIZE_T

只是好奇为什么?

1 个答案:

答案 0 :(得分:2)

boolint的子类,这意味着它们都是自然数。自然数是实数的子集,因此在可接受浮点数的情况下可以接受。

PEP 484 -- Type Hints中明确指出了在指定int的情况下float是可接受的:

  

此PEP并不是要求用户先写import numbers然后再使用numbers.Float等,而是提出了一个几乎有效的快捷方式:当参数被注释为类型为float时,可接受类型为int的参数[。]

  • 您的str中的Union[]组件在这里没有任何作用;您可以将其删除,但仍然可以接受分配。纯粹是float类型的注释使12False的值可以接受。

  • int()调用完全是多余的,12文字语法已经产生了一个int对象。