Python - доступ к защищенному члену _ класса

При наличии класса с некоторыми защищенными членами и общедоступным интерфейсом для их изменения, когда обычно допускается прямой доступ к защищенным членам? Я имею в виду несколько конкретных примеров:

  1. Модульное тестирование
  2. Внутренние закрытые методы, такие как __add__ или __cmp__ для доступа к другим защищенным атрибутам
  3. Рекурсивные структуры данных (например, доступ к next._data в связанном списке)

Я не хочу обнародовать эти атрибуты, так как не хочу, чтобы они были публично затронуты. Моя подсветка синтаксиса в IDE-синтаксисе постоянно повторяет, что я не прав в доступе к защищенным членам - кто здесь?

РЕДАКТИРОВАТЬ - добавив простой пример ниже:

class Complex:
    def __init__(self, imaginary, base):
        self._imaginary = imaginary
        self._base = base

    def __str__(self):
        return "%fi + %f" % self._base, self._imaginary

    def __add__(self, other):
        return Complex(self._imaginary + other._imaginary, self._base + other._base)

Pycharm выделяет other._imaginary и other._base следующим образом:

Доступ к защищенному члену _imaginary класса

1 ответ

Решено - проблема заключалась в отсутствии подсказок. Ниже работает сейчас:

class Complex:
    def __init__(self, imaginary, base):
        self._imaginary = imaginary
        self._base = base

    def __str__(self):
        return "%fi + %f" % self._base, self._imaginary

    def __add__(self, other):
        """
        :type other: Complex
        :rtype Complex:
        """
        return Complex(self._imaginary + other._imaginary, self._base + other._base)
Другие вопросы по тегам