将布尔值与整数混合时,Mypy不会引发错误

ahn*_*kle 4 python integer boolean mypy

我正在尝试使用mypy检查Python 3项目。在下面的示例中,我希望mypy将类的构造标记MyClass为错误,但事实并非如此。

class MyClass:
    def __init__(self, i:int) -> None:
        pass

obj = MyClass(False)
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?即解释为什么mypy不报告错误?

Kon*_*lph 5

这是因为-不幸的是!— Python中的布尔值是整数。与中一样,bool是的子类int

In [1]: issubclass(bool, int)
Out[1]: True
Run Code Online (Sandbox Code Playgroud)

因此,代码进行类型检查,并且False是带有value的有效整数0