mypy与类型提示完美配合,但当我使用数据类作为返回类型时,它不检查类型
我的命令:python -m pipenv run mypy .
@dataclass
class HttpMessageModel:
message: str
code: int
def http_message(message: str) -> HttpMessageModel:
return {
"message": message,
"code": "200", # --> should fail since we have a int
}
完整示例:https://github.com/TheSmartMonkey/create-python-app
如果我把你的代码放在一个文件中:
from dataclasses import dataclass
@dataclass
class HttpMessageModel:
message: str
code: int
def http_message(message: str) -> HttpMessageModel:
return {
"message": message,
"code": "200", # --> should fail since we have a int
}
并运行mypy
,我确实得到了预期的错误:
C:testpython>mypy test.py
test.py:9: error: Incompatible return value type (got "Dict[str, str]", expected "HttpMessageModel")
检查实际项目的问题可能在于如何设置目录结构。查看https://mypy.readthedocs.io/en/latest/running_mypy.html#mapping-file-paths-to-modules并尝试在包目录的根目录中添加__init__.py
文件或将namespace_packages = True
添加到您的mypy配置中。
注意,要返回HttpMessageModel
而不是dict
,函数应该这样做:
def http_message(message: str) -> HttpMessageModel:
return HttpMessageModel(message, 200)