Мета: закріпити інкапсуляцію (захист даних через _ та __), навчитися використовувати магічні методи для зручного інтерфейсу та організувати код у вигляді простого пакета.
Напишіть клас, який моделює реальний об’єкт із життя, де важливо захищати критичні дані та надавати зручний інтерфейс. Оберіть свій або один із трьох варіантів:
- «Банківський рахунок»
- «Термостат (обігрівач/кондиціонер)»
- «Пароль користувача» (або «Обліковий запис користувача»)
-
Конструктор
__init__
Приймає 3–4 параметри для ініціалізації.
Критичні дані (баланс, температура, пароль тощо) зробіть приватними (__назва) або захищеними (_назва). -
Інкапсуляція
- Доступ до приватних/захищених атрибутів — тільки через властивості.
- Не дозволяйте некоректні значення (від’ємний баланс, температура поза діапазоном, слабкий пароль тощо).
- Додайте хоча б один метод, який змінює стан об’єкта з валідацією.
-
Магічні методи (використовуйте хоча б 3 з наступних):
__str__— повертає зручний рядок дляprint(obj)__repr__— повертає «офіційний» рядок для розробника (наприклад,BankAccount(owner='Олексій', balance=5000))__eq__— дозволяє порівнювати два об’єкти (наприклад, два рахунки рівні, якщо однакові власник і баланс)__bool__— повертаєTrue/Falseзалежно від стану (наприклад, чи активний рахунок/чи є гроші/чи сильний пароль)__add__або__sub__— для операцій типурахунок += 1000аборахунок -= 500(з перевіркою)
-
Пакетна структура
Організуйте код у вигляді пакета з назвою, наприклад,finance,climateабоauth(залежно від варіанту). -
Методи
Додайте 4–5 звичайних методів (крім магічних), наприклад:- геттер для читання стану
- сеттер/метод поповнення/зміни з перевіркою
- метод дії (переказ, нагрів, перевірка пароля тощо)
- метод стану/інформації
- Додайте обробку помилок (винятки
ValueErrorпри некоректних діях) - У
__init__або в методах додайте просту валідацію (наприклад, валюта тільки "UAH", "USD", "EUR") - Зробіть так, щоб спроба прямого доступу до
__балансвикликала помилку (name mangling)
Рішення викласти в публічний репозиторій, посилання на який надати в коментар до цього ДЗ.