我正在尝试使用mypy检查Python 3项目。在下面的示例中,我希望mypy将类MyClass
的构造标记为错误,但不是。
class MyClass:
def __init__(self, i:int) -> None:
pass
obj = MyClass(False)
任何人都可以解释一下吗?
编辑:即解释为什么mypy不报告错误?
这是因为-不幸的是! -Python中的布尔值是整数。与之类似,bool
是int
的子类:
In [1]: issubclass(bool, int)
Out[1]: True
因此进行代码类型检查,并且False
是值为0
的有效整数。
实际上您是对的:
从文档(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个源文件)