如何强制覆盖装饰器?

问题描述 投票:0回答:1

我遇到了 Python 3.12 的新的 override 装饰器,它看起来是一个非常好的实践。

我想知道是否有办法让它“强制”使用?也许有某种方法可以为其配置

mypy
?或者至少配置 linter 以显示警告。

from typing import override


class Base:
    def log_status(self) -> None:
        ...

class Sub(Base):
    @override  # I would like to make it mandatory while overriding a method
    def log_status(self) -> None: 
        ...
python mypy python-typing
1个回答
1
投票

Mypy 为此有专门的规则:

explicit-override

将以下内容放入您的

pyproject.toml
中以启用它:

[tool.mypy]
enable_error_code = "explicit-override"

这也可以用于

mypy.ini
和其他类型的配置文件 Mypy 读取,但这留给读者作为练习。

或者,您可以将

--enable-error-code explicit-override
传递给命令行工具或在文件中放置 配置注释

(游乐场)

# mypy: enable-error-code=explicit-override

class Sub(Base):
    # error: Method "..." is not using @override but is overriding a method in class "..."
    def log_status(self) -> None: ...
© www.soinside.com 2019 - 2024. All rights reserved.