Pylint W0212 受保护访问

Pylint W0212 protected-access

在 Python 中,带有一个下划线的前缀表示成员不应在其 class 之外访问。这似乎是基于每个 class 的基础,例如 Java and C++.

但是,pylint 似乎在每个对象的基础上强制执行此约定。有没有办法允许每个 class 访问而不诉诸 #pylint: disable=protected-access

class A:
    def __init__(self):
        self._b = 5

    def __eq__(self, other):
        return self._b == other._b

结果:

pylint a.py
a.py:6: W0212(protected-access) Access to a protected member _b of a client class

Pylint 描述消息 here

pylint 不知道 other 是哪种类型(应该如何,您可以将 A 的实例与所有内容进行比较),因此出现警告。我认为没有办法绕过警告。

您可以通过将 # pylint: disable=W0212 附加到该行来禁用该行的警告。

Christian Geier 关于您收到错误的原因以及如何禁用它的说法是正确的。

不过,我鼓励您考虑更改代码:pylint 正在告诉您一些重要的事情。从您的示例代码看来,您想使用 eq 将 class A 的对象与 class A 的其他对象进行比较,但您的示例不能保证调用者不会尝试 A() == C() .当您检查 Circle()._radius == Sphere._radius 时返回 True 似乎可能会导致问题。

有关如何处理此问题的讨论,请参阅 this Whosebug thread