You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让mypy自动忽略使用特定自定义装饰器的类?

解决方案

有几种可行的方法可以让自定义装饰器自动触发mypy忽略类型检查,无需重复添加@typing.no_type_check:

1. 用no_type_check_decorator标记自定义装饰器

给你的turn_into_data装饰器添加@typing.no_type_check_decorator(Python 3.10+内置)或@typing_extensions.no_type_check_decorator(Python 3.9及以下版本),类型检查器会自动对被该装饰器修饰的类禁用类型检查。

示例代码:

from typing import no_type_check_decorator

@no_type_check_decorator
def turn_into_data(cls):
    # 装饰器逻辑:提取注解生成目标数据
    cls.generated_data = {attr: value for attr, value in cls.__annotations__.items()}
    return cls

# 使用时无需额外添加no_type_check
@turn_into_data
class Foo:
    bar: 5
    baz: "custom_literal"

这个方案优势是精准控制——仅对被turn_into_data装饰的类生效,不会干扰其他代码的类型检查。

2. 在mypy配置中针对性禁用错误码

mypy对非类型注解的错误会抛出valid-type错误码,你可以在mypy配置文件(如mypy.ini或pyproject.toml)中局部或全局禁用该错误:

全局禁用(不推荐,可能掩盖其他合法错误)

[mypy]
disable_error_code = valid-type

仅针对特定模块禁用

[mypy-your_project.data_modules.*]
disable_error_code = valid-type

这种方式无需修改代码,但需要维护mypy配置,范围控制精度不如第一种方法。

3. 自定义mypy插件(复杂场景适用)

如果项目有更复杂的类型检查需求,可以编写mypy插件,让它识别turn_into_data装饰器并自动跳过对类注解的类型验证。这种方法开发成本较高,但灵活性最强,适合大规模项目定制规则。


内容的提问来源于stack exchange,提问作者Joseph Garvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:43:35