跳到内容

内置属性遮蔽 (A003)

派生自 flake8-builtins linter。

作用

检查类属性和方法是否使用了与 Python 内置函数相同的名称。

为什么这不好?

对属性名称重用内置名称会增加代码阅读和维护的难度,并且可能导致不明显的错误,因为读者可能会将该属性误认为是内置函数,反之亦然。

由于方法和类属性通常无法直接从类作用域外部引用,因此此规则仅适用于那些遮蔽了内置函数从类作用域内部引用的方法和属性,如下面的示例所示,其中 list[int] 返回类型注解解析为 list 方法,而不是内置函数。

class Class:
    @staticmethod
    def list() -> None:
        pass

    @staticmethod
    def repeat(value: int, times: int) -> list[int]:
        return [value] * times

可以通过 lint.flake8-builtins.ignorelist 配置选项将内置函数标记为此规则的例外,或者将其转换为适当的双下划线方法。使用 @typing.override@typing_extensions.override 修饰的方法也会被忽略。

示例

class Class:
    @staticmethod
    def list() -> None:
        pass

    @staticmethod
    def repeat(value: int, times: int) -> list[int]:
        return [value] * times

Options (选项)