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

子类使用父类@property.setter时Mypy严格模式报错的解决咨询

解决Mypy对父类property setter装饰器的类型检查错误

问题场景

当子类继承自带有@property装饰器的父类,尝试通过@父类.属性.setter语法在子类中定义属性的setter方法时,使用mypy --strict模式会触发两个类型检查错误:

示例代码

from abc import ABC

class Cell(ABC):
    def __init__(self, value: int | None = None):
        self._value = value

    @property
    def value(self) -> int | None:
        return self._value


class InputCell(Cell):
    @Cell.value.setter
    def value(self, value: int) -> None:
        self._value = value

Mypy错误输出

react.py:28: error: "Callable[[Cell], int | None]" has no attribute "setter"  [attr-defined]
react.py:28: error: Untyped decorator makes function "value" untyped  [misc]

解决方案

方案一:用cast标记装饰器类型

Mypy无法自动识别父类property的setter属性,我们可以通过typing.cast明确告诉Mypy该装饰器的正确类型:

from abc import ABC
from typing import cast

class Cell(ABC):
    def __init__(self, value: int | None = None):
        self._value = value

    @property
    def value(self) -> int | None:
        return self._value


class InputCell(Cell):
    @cast(property, Cell.value).setter
    def value(self, value: int) -> None:
        self._value = value

方案二:父类中显式定义空setter(推荐)

如果可以修改父类代码,在父类中先定义一个空的setter方法(比如抛出NotImplementedError),让Mypy能正确识别property的setter属性,子类再重写该方法:

from abc import ABC

class Cell(ABC):
    def __init__(self, value: int | None = None):
        self._value = value

    @property
    def value(self) -> int | None:
        return self._value

    @value.setter
    def value(self, value: int) -> None:
        raise NotImplementedError("子类必须实现该setter方法")


class InputCell(Cell):
    @value.setter
    def value(self, value: int) -> None:
        self._value = value

这种方式更符合面向对象设计规范,同时彻底解决Mypy的类型检查问题。

方案三:临时忽略错误(不推荐)

如果无法修改代码结构,可以在错误行添加注释忽略Mypy检查,但这只是临时 workaround,不建议长期使用:

class InputCell(Cell):
    @Cell.value.setter  # type: ignore[attr-defined, misc]
    def value(self, value: int) -> None:
        self._value = value

内容的提问来源于stack exchange,提问作者Abhijit Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:42:53