Статья Эксплуатация python приложений: Инкапсуляция.

link removed

Привет! В то время как другие языки программирования, такие как Java, позволяют программисту создавать приватные переменные и атрибуты, Python в настоящее время не имеет встроенного приватного типа. Эта техника известна как инкапсуляция. В ней вы пытаетесь скрыть информацию в своих классах от пользователей. Инкапсуляция в Python, как и многие функции языка, очень проста в реализации. Вам просто нужно добавить два символа подчеркивания (_) во время объявления переменной. Как я уже говорил в предыдущей статье «Эксплуатация python приложений», лучший способ понять суть эксплуатации - это увидеть, как она происходит.

python-incapsulation-1.png


Мы создаем класс под названием Character, который не наследует ничего от родительского класса. Мы объявляем три обычные переменные, за которыми следуют три инкапсулированные версии, которые можно определить по символам двойного подчеркивания. Пока что всё хорошо, теперь давайте посмотрим, что произойдет, когда мы попытаемся получить доступ ко всем переменным из вне.



python-incapsulation-2.png


Как мы видим, к обычным атрибутам можно получить доступ из внешнего объекта. Но инкапсулированные версии не доступны. Бинго, мы скрыли наши атрибуты, миссия завершена. А теперь рассмотрим как мы можем получить к ним доступ.

python-incapsulation-3.png


Мы проверяем каталог для нашего объекта (character) и видим, что наши инкапсулированные атрибуты имеют более длинное имя. Вместо __real_age, __real_name, и __real_weight, мы видим _Character__real_age, _Character__real_name, и _Character__real_weight.Теперь нам просто нужно вызвать расширенное имя атрибута для нашего объекта, и вуаля, у нас есть доступ к нашим так называемым, инкапсулированным приватным переменным. Ну, на этом всё. Спасибо за внимание!
 

ActionNum

Well-known member
27.11.2016
80
93
BIT
0
Спасибо за статью! Но здесь я с вами не соглашусь, с той мыслью, что это баг и его можно использовать в корыстных целях. Как вы сказали в начале статьи, механизм приватных типов в Python отсутствует, это верно, если мы конечно не знаем как эти приватные данные обрабатываются интерпретатором Python. Он их просто переименовывает специальным образом (как вы и продемонстрировали), делается это с целью защиты кодера от собственных ошибок, чтобы он случайным образом не перезаписал их.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!