如何解决数据类的 IntEnum 属性的正确类型提示?
我在 3.8.8 中创建了一个数据类来存储来自 REST API 调用的结果,其属性之一用于存储 HTTP 响应状态:
from dataclasses import dataclass
from http import HTTPStatus
@dataclass
class APICallResult:
response_text: str
http_status: HTTPStatus
当我尝试创建此类的对象时,如下所示:
result = APICallResult('foo',HTTPStatus.OK)
PyCharm 2020.3.3 只是将 HTTPStatus.OK
标记为错误:
Expected type 'HTTPStatus',got 'int' instead`.
现在我想知道在这种情况下 IntEnum
的正确类型提示是什么?我认为 Literal
在这里可能是一个尴尬的选择。
解决方法
HTTPStatus.OK
是 HTTPStatus
IntEnum 子类的成员:
enum.IntEnum 的子类,定义了一组 HTTP 状态代码、原因短语和用英文编写的长描述。
您得到的错误是 PyCharm 静态类型检查器中的错误,如果您像下面的示例一样编写属性类型提示并使用 mypy 进行测试,您将看到没有错误:
from dataclasses import dataclass
from http import HTTPStatus
from typing import Literal
@dataclass
class APICallResult:
response_text: str
http_status: Literal[HTTPStatus.OK]
result = APICallResult('foo',HTTPStatus.OK)
Success: no issues found in 1 source file
如果您尝试像这样注释 dataclass 属性:
from dataclasses import dataclass
from http import HTTPStatus
@dataclass
class APICallResult:
response_text: str
http_status: HTTPStatus.OK
result = APICallResult('foo',HTTPStatus.OK)
mypy gives the following warning:
main.py:9: error: Invalid type: try using Literal[HTTPStatus.OK] instead?
Found 1 error in 1 file (checked 1 source file)
注释 Enum 成员的规则在 PEP 586 -- 文字类型中给出:
Legal parameters for Literal at type check time
Literal[Color.RED] # 假设颜色是一些枚举
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。