Секреты инкапсуляции в Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В эпоху, когда мистика древнего мира по-прежнему процветает, существует скрытый храм, окутанный в тайну и охраняемый призрачным стражем, призрачным охранителем. Говорят, что в этом храме скрывается секрет инкапсуляции, таинственная сила, которая защищает сокровища храма, подобно тому, как инкапсуляция в Python защищает целостность данных объекта. Будучи стажером-магом Python, ваша задача — раскрыть эти секреты, преодолеть головоломки стража и овладеть искусством инкапсуляции в Python, чтобы овладеть таинственным знанием внутри.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python/ObjectOrientedProgrammingGroup -.-> python/encapsulation("Encapsulation") subgraph Lab Skills python/encapsulation -.-> lab-271548{{"Секреты инкапсуляции в Python"}} end

Создание класса 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. Помните, что искусство написания хорошего кода часто заключается в создании фасада, который показывает необходимые детали, защищая при этом ядро логики, точно так же, как это делает мифические охранители в наших древних сказках.