Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
07 Июл 2023
2 мин
2639

Приватность методов в Python

Считается, что в языке программирования Python есть возможность создавать «приватные» методы и переменные внутри класса, добавляя к их названию

Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.

Считается, что в языке программирования Python есть возможность создавать «приватные» методы и переменные внутри класса, добавляя к их названию двойные подчеркивания, например, __myPrivateMethod(). Однако, в действительности, эти «приватные» методы и переменные не являются полностью приватными в традиционном понимании этого термина.

В качестве примера возьмем следующий код:

class MyClass:
    def myPublicMethod(self):
        print('public method')
    def __myPrivateMethod(self):
        print('this is private!!')

obj = MyClass()
obj.myPublicMethod()

Здесь мы создали класс с публичным методом myPublicMethod() и приватным методом __myPrivateMethod(). При попытке вызвать приватный метод, мы столкнемся с ошибкой AttributeError, которая говорит о том, что у экземпляра класса MyClass нет атрибута __myPrivateMethod.

obj.__myPrivateMethod()

На первый взгляд, все выглядит ожидаемо — мы не можем вызвать приватный метод. Однако, при использовании функции dir() на объекте, мы обнаружим новый «магический» метод, который Python создает автоматически для всех ваших «приватных» методов.

dir(obj)

Название этого нового метода всегда начинается с подчеркивания, за которым следует имя класса и имя метода.

obj._MyClass__myPrivateMethod()

Таким образом, «приватность» методов в Python является относительной. Несмотря на то, что Python предоставляет возможность в некоторой степени инкапсулировать методы и переменные, полностью сделать их приватными не удается. На самом деле, Python использует механизм под названием «name mangling» для изменения имени «приватного» метода, чтобы предотвратить его случайное вызывание.

Этот механизм не предназначен для создания секретности или безопасности, а служит для предотвращения ошибок при работе с методами и переменными, которые должны быть использованы только внутри класса.

Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.

Тест на профориентацию
За 10 минут узнайте, как ваш опыт пригодиться в IT индустрии
Подробнее
Тест на профориентацию

Добавить комментарий