В чем смысл одинарного и двойного подчеркивания перед переменной или методом при определении класса? День добрый. Никак не могу понять, смысл одинарного подчеркивания.
Пишут, что добавляет приватность, но я все равно могу обратиться ко всем объектам:
_internal_name = 'one_nodule' # private variable
_internal_version = '1.0' # private variable
class _Base: # private class
_hidden_factor = 2 # private variable
def __init__(self, price):
self._price = price
def _double_price(self): # private method
return self._price * self._hidden_factor
def get_double_price(self):
return self._double_price()
По поводу двойного, могли бы разъяснить. Понял, что декарируются _ИмяКласса__метод, но как это выглядит на практике не совсем понимаю
Заранее спасибо

21 Авг 2019 в 06:58
182 +1
0
Ответы
1

День добрый!
Одинарное подчеркивание перед именем переменной или метода в Python обозначает соглашение об использовании "protected" переменной или метода, то есть они предполагаются для внутреннего использования внутри класса или подклассов, но могут быть доступны извне. Это не является строгим правилом и скорее предположение для других программистов о том, что данная переменная или метод предназначен для внутреннего использования. Однако, как вы правильно заметили, доступ к ним все равно возможен извне.

Двойное подчеркивание перед именем переменной или метода в Python обозначает их "private" свойство. Python автоматически изменяет имя переменной/метода с двойным подчеркиванием на _ИмяКласса__переменная. Это делает их недоступными извне класса, в котором они определены. Тем не менее, есть способы доступа к "private" переменным и методам извне класса, но это не рекомендуется, так как это нарушает принципы инкапсуляции и может привести к ошибкам в коде.

Пример применения двойного подчеркивания:

class Base:
__hidden_factor = 2
def __init__(self, price):
self.__price = price
def __double_price(self):
return self.__price * self.__hidden_factor
def get_double_price(self):
return self.__double_price()

В данном случае, переменная __hidden_factor, __price и метод __double_price считаются "private" и недоступны извне класса Base.

Надеюсь, это поможет вам лучше понять разницу между одинарным и двойным подчеркиванием в Python. Если у вас еще остались вопросы, не стесняйтесь спрашивать.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир