我正在尝试使用mypy检查Python 3项目。在下面的示例中,我希望mypy将类MyClass
的构造标记为错误,但事实并非如此。
class MyClass:
def __init__(self, i:int) -> None:
pass
obj = MyClass(False)
有人可以解释吗?即解释为什么mypy不报告错误?
答案 0 :(得分:5)
这是因为-不幸的是! -Python中的布尔值是整数。与之类似,bool
是int
的子类:
In [1]: issubclass(bool, int)
Out[1]: True
因此代码进行类型检查,并且False
是值为0
的有效整数。
答案 1 :(得分:1)
实际上您是对的:
从文档中(test.py的内容):
class C2:
def __init__(self, arg: int):
self.var = arg
c2 = C2(True)
c2 = C2('blah')
mypy test.py
$>test.py:11: error: Argument 1 to "C2" has incompatible type "str"; expected "int"
在1个文件中发现1个错误(已检查1个源
注释c2 = C2('blah')
class C2:
def __init__(self, arg: int):
self.var = arg
c2 = C2(True)
mypy test.py
Success: no issues found in 1 source file
由于某种原因,似乎布尔值之类的值被视为整数 并说明: https://github.com/python/mypy/issues/1757
表示
class C2:
def __init__(self, arg: bool):
self.var = arg
# tHIx WORKS FINE
c2 = C2(true)
# tHIx DOES NOT WORK
c2 = C2(0)
test.py:10:错误:“ C2”的参数1具有不兼容的类型“ int”;预期的“布尔” 在1个文件中发现1个错误(检查了1个源文件)