"Я знаю, что это идет вразрез с общей идеей частного и публичного" Не совсем "против", просто отличается от C ++ и Java.
Приватный - как реализовано в C ++ и Java, не очень полезная концепция. Иногда помогает выделить детали реализации. Но это слишком злоупотребляет.
Имена Python, начинающиеся с двух __
, являются особыми, и вы не должны, как обычно, определять атрибуты с такими именами. Имена с __
являются специальными и являются частью реализации. И выставлены для вашего использования.
Имена, начинающиеся с одного _
, являются «частными». Иногда они скрыты, немного. В большинстве случаев применяется правило «согласия взрослых» - не используйте их по глупости, они могут быть изменены без предварительного уведомления.
Мы ставим «частное» в кавычки, потому что это просто соглашение между вами и вашими пользователями. Вы пометили вещи с помощью _
. Ваши пользователи (и вы сами) должны это соблюдать.
Часто у нас есть имена функций методов с начальным _
, указывающим на то, что мы считаем их «частными» и могут быть изменены без предварительного уведомления.
Бесконечные методы получения и установки, которые требуются Java, не так часто используются в Python. Самоанализ Python более гибкий, у вас есть доступ к внутреннему словарю значений атрибутов объекта, и у вас есть первый класс функций , таких как getattr()
и setattr()
.
Кроме того, у вас есть функция property()
, которая часто используется для привязки геттеров и сеттеров к одному имени, которое ведет себя как простой атрибут, но на самом деле это четко определенные вызовы функций методов.