Свойства и инкапсуляция
Защитите данные объектов чистым синтаксисом атрибутов и тихой проверкой
@property, чтобы запускать проверку в тот момент, когда атрибут читают или записывают — а вызывающий код по-прежнему пишет простое obj.value.
- объяснить, что такое инкапсуляция и зачем она нужна,
- правильно читать соглашения об одном
_singleи двух__doubleподчёркиваниях, - превратить метод в атрибут только для чтения с помощью
@property, - добавить
@x.setter, который проверяет каждую запись, - создавать вычисляемые (производные) свойства и понимать их компромиссы.
1. Что такое инкапсуляция?
Инкапсуляция — один из столпов объектно-ориентированного программирования. Это дисциплина: держать внутреннее состояние объекта закрытым и предоставлять остальной программе контролируемую, чётко определённую поверхность для работы. Объект становится ответственным за свои данные: он сам решает, какое значение допустимо, и никто снаружи не может тихо перевести его в сломанное состояние.
Представьте банкомат. Вы никогда не лезете внутрь машины, чтобы переложить наличные между лотками. Вы взаимодействуете через маленький защищённый интерфейс — вставить карту, ввести PIN, запросить сумму — и машина проверяет правила (верный PIN, достаточный баланс, дневной лимит), прежде чем притронуться к деньгам внутри. Лотки с наличными — это приватное состояние; клавиатура и экран — публичный интерфейс. Инкапсуляция — это проектирование классов таким же образом.
Без неё любая часть большой программы может залезть и установить account.balance = -9999, и вот у вас ошибка, которая могла родиться где угодно. С инкапсуляцией сам класс отказывается принимать недопустимые значения, поэтому ошибка ловится у источника.