Рассмотрим следующий фрагмент:
class MyClass:
def __init__(self, i):
self._i = i
def _print(self):
print(self._i)
my_obj = MyClass(5)
print(my_obj._i)
my_obj._print()
Является ли MyClass._i
и MyClass._print
защищенной или внутренней переменной?
Согласно официальным документам Python, Классы § ЛичныеПеременные :
существует соглашение, которому следует большая часть кода Python: имя с префиксом подчеркивания (например, _spam) следует рассматривать как непубличную часть API (независимо от того, является лиэто функция, метод или элемент данных).Он должен рассматриваться как деталь реализации и может быть изменен без предварительного уведомления.
Итак, как я понимаю эти документы, перед именем подчеркивания подразумевается «внутренний»: предназначенный для использования пакетомэто определено в этом пакете, а не вне его.И приведенный выше фрагмент корректен.
Однако: PyCharm выдает предупреждения, если я открываю приведенный выше фрагмент:
Access to a protected member _i of a class
Access to a protected member _print of a class
Почему «защищен»?
Я что-то упустил?Есть ли соглашение, о котором я не знаю, которое требует, чтобы я предпринял дополнительные шаги, чтобы различать защищенное и внутреннее?