Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created February 18, 2026 11:48
Show Gist options
  • Select an option

  • Save sunmeat/97c62e3602ed9fc66ff30f60592ff2c4 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/97c62e3602ed9fc66ff30f60592ff2c4 to your computer and use it in GitHub Desktop.
ДЗ на інкапсуляцію в пайтон

Інкапсуляція + Магічні методи + Пакети

Мета: закріпити інкапсуляцію (захист даних через _ та __), навчитися використовувати магічні методи для зручного інтерфейсу та організувати код у вигляді простого пакета.

Напишіть клас, який моделює реальний об’єкт із життя, де важливо захищати критичні дані та надавати зручний інтерфейс. Оберіть свій або один із трьох варіантів:

  • «Банківський рахунок»
  • «Термостат (обігрівач/кондиціонер)»
  • «Пароль користувача» (або «Обліковий запис користувача»)

Вимоги до класу

  1. Конструктор __init__
    Приймає 3–4 параметри для ініціалізації.
    Критичні дані (баланс, температура, пароль тощо) зробіть приватними (__назва) або захищеними (_назва).

  2. Інкапсуляція

    • Доступ до приватних/захищених атрибутів — тільки через властивості.
    • Не дозволяйте некоректні значення (від’ємний баланс, температура поза діапазоном, слабкий пароль тощо).
    • Додайте хоча б один метод, який змінює стан об’єкта з валідацією.
  3. Магічні методи (використовуйте хоча б 3 з наступних):

    • __str__ — повертає зручний рядок для print(obj)
    • __repr__ — повертає «офіційний» рядок для розробника (наприклад, BankAccount(owner='Олексій', balance=5000))
    • __eq__ — дозволяє порівнювати два об’єкти (наприклад, два рахунки рівні, якщо однакові власник і баланс)
    • __bool__ — повертає True/False залежно від стану (наприклад, чи активний рахунок/чи є гроші/чи сильний пароль)
    • __add__ або __sub__ — для операцій типу рахунок += 1000 або рахунок -= 500 (з перевіркою)
  4. Пакетна структура
    Організуйте код у вигляді пакета з назвою, наприклад, finance, climate або auth (залежно від варіанту).

  5. Методи
    Додайте 4–5 звичайних методів (крім магічних), наприклад:

    • геттер для читання стану
    • сеттер/метод поповнення/зміни з перевіркою
    • метод дії (переказ, нагрів, перевірка пароля тощо)
    • метод стану/інформації

Додаткові побажання (не обов’язково)

  • Додайте обробку помилок (винятки ValueError при некоректних діях)
  • У __init__ або в методах додайте просту валідацію (наприклад, валюта тільки "UAH", "USD", "EUR")
  • Зробіть так, щоб спроба прямого доступу до __баланс викликала помилку (name mangling)

Рішення викласти в публічний репозиторій, посилання на який надати в коментар до цього ДЗ.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment