Введение
В эпоху, когда мистика древнего мира по-прежнему процветает, существует скрытый храм, окутанный в тайну и охраняемый призрачным стражем, призрачным охранителем. Говорят, что в этом храме скрывается секрет инкапсуляции, таинственная сила, которая защищает сокровища храма, подобно тому, как инкапсуляция в Python защищает целостность данных объекта. Будучи стажером-магом Python, ваша задача — раскрыть эти секреты, преодолеть головоломки стража и овладеть искусством инкапсуляции в Python, чтобы овладеть таинственным знанием внутри.
Создание класса Sentinel
В этом шаге вы начнете свое путешествие, создав класс, представляющий призрачного охранителя, что будет вашим первым столкновением с инкапсуляцией в Python. Этот охранитель хранит секретное сообщение, которое можно получить только с помощью определенного метода, демонстрируя силу приватных атрибутов. Вы создадите класс Sentinel с приватными атрибутами и методами, чтобы защитить его секреты.
Теперь откройте ~/project/sentinel.py в своем любимом текстовом редакторе и добавьте следующий код:
class Sentinel:
def __init__(self):
self.__message = 'The key to encapsulation lies within the walls.'
def reveal_message(self):
return self.__message
guardian = Sentinel()
print(guardian.reveal_message())
В этом коде __message - это приватный атрибут, обозначенный двумя нижними подчеркиваниями, что означает, что он доступен только внутри класса. Метод reveal_message предоставляет контролируемый доступ к атрибуту __message.
Попробуйте запустить код:
python sentinel.py
Вы должны увидеть напечатанное секретное сообщение охранителя:
The key to encapsulation lies within the walls.
Улучшение охранителя
На этом шаге вы усовершенствуете класс Sentinel методом для изменения секретного сообщения, но только в том случае, если будет введен правильный пароль. Это еще больше укрепит инкапсуляцию нашего охранителя и покажет, как инкапсулировать как данные, так и поведение в классе Python.
Обновите sentinel.py следующим кодом:
## sentinel.py
class Sentinel:
def __init__(self):
self.__message = 'The key to encapsulation lies within the walls.'
self.__passphrase = 'abracadabra'
def reveal_message(self):
return self.__message
def change_message(self, new_message, passphrase):
if passphrase == self.__passphrase:
self.__message = new_message
else:
print('Incorrect passphrase!')
guardian = Sentinel()
guardian.change_message('Encapsulation is powerful!', 'abracadabra')
print(guardian.reveal_message())
Теперь, когда вы запустите код:
python sentinel.py
Вы увидите, что сообщение было обновлено, если использован правильный пароль:
Encapsulation is powerful!
Резюме
В этом практическом занятии вы попробовали себя в мире, где древние принципы отражали современный концепцию инкапсуляции в Python. Вы создали класс Sentinel, который защищал свои секреты с использованием приватных атрибутов, узнали, как манипулировать ими с помощью публичных методов и осуществляли контроль доступа с использованием пароля. Целью этого практического занятия было обеспечить практический подход к пониманию приватных и публичных интерфейсов класса Python, закрепив идею того, что инкапсуляция заключается не только в скрытии деталей, но и в предоставлении доступа к нужным из них.
В результате этого упражнения вы приобрели более глубокое понимание того, почему инкапсуляция является фундаментальным аспектом объектно-ориентированного программирования и как ее можно элегантно реализовать в Python. Помните, что искусство написания хорошего кода часто заключается в создании фасада, который показывает необходимые детали, защищая при этом ядро логики, точно так же, как это делает мифические охранители в наших древних сказках.



