Pylint W0212 защищенный доступ

В Python префикс с одним подчеркиванием указывает, что член не должен быть доступен вне его класса. Похоже, это для отдельных классов, таких как Java и C++.

Тем не менее, Pylint, кажется, обеспечивает соблюдение этого соглашения для каждого объекта. Есть ли способ разрешить доступ для класса без обращения к #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 описывает сообщение здесь.

Ответ 1

pylint не знает, какой тип other (как это сделать, вы можете сравнить экземпляр A со всем), поэтому предупреждение. Я не думаю, что есть способ отключить предупреждение.

Вы можете отключить предупреждение только для одной строки с добавлением # pylint: disable=W0212 к этой строке.

Ответ 2

Кристиан Гейер прав в том, почему вы получаете ошибку и как ее отключить.

Я бы посоветовал вам подумать об изменении кода: pylint говорит вам кое-что важное. Из вашего примера кода выглядит так, как будто вы хотите использовать eq для сравнения объектов класса A с другими объектами класса A, но ваш пример не гарантирует, что вызывающая сторона не будет пытаться A() == C(). Возвращение True при проверке Circle()._radius == Sphere._radius может вызвать проблемы.

Смотрите fooobar.com/info/25596/... для обсуждения того, как с этим справиться.