Урок 22. OOP — __init__, self та атрибути
Урок 22. OOP — init, self та атрибути
Section titled “Урок 22. OOP — init, self та атрибути”Тривалість: 45–60 хв
Рівень: OOP Explorer
📖 Словник: атрибут (англ. “attribute”) — змінна, яка зберігається всередині об’єкта (характеристика: ім’я, HP, швидкість). Конструктор (англ. “constructor”) — спеціальний метод
__init__, що одразу створює й заповнює об’єкт.
🎯 Місія
Section titled “🎯 Місія”Навчи клас одразу створювати правильно налаштовані об’єкти.
🧠 Ключова ідея
Section titled “🧠 Ключова ідея”class Player: def __init__(self, name, hp, speed): self.name = name self.hp = hp self.speed = speed
marko = Player("Marko", 100, 5)💡 Пояснення простою мовою
Section titled “💡 Пояснення простою мовою”__init__ — це конструктор, який автоматично запускається, коли ти створюєш об’єкт. Він одразу заповнює всі потрібні поля, замість того щоб додавати їх вручну. self — це посилання на сам об’єкт, що саме створюється (типовий «я»).
🧩 Розбираємо по рядках
Section titled “🧩 Розбираємо по рядках”class Player: def __init__(self, name, hp, speed): # Конструктор: приймає параметри self.name = name # self.name = «ім'я цього конкретного об'єкта» self.hp = hp # Здоров'я записуємо всередину self.speed = speed # Швидкість теж
marko = Player("Marko", 100, 5)# Python викликає __init__(marko, "Marko", 100, 5)# Тепер marko.name == "Marko", marko.hp == 100, marko.speed == 5graph LR
A["Player('Marko', 100, 5)"] --> B["__init__ запускається"]
B --> C["self.name = 'Marko'"]
B --> D["self.hp = 100"]
B --> E["self.speed = 5"]
C --> F["marko = готовий об'єкт"]
D --> F
E --> F
🔎 Приклад: запускай і дивись
Section titled “🔎 Приклад: запускай і дивись”class Enemy: def __init__(self, name, hp, damage): self.name = name self.hp = hp self.damage = damage self.alive = True
goblin = Enemy("Goblin", 30, 5)orc = Enemy("Orc", 80, 12)
print(goblin.name, "— HP:", goblin.hp, "alive:", goblin.alive)print(orc.name, "— HP:", orc.hp, "alive:", orc.alive)class Enemy: def __init__(self, name, hp, damage): self.name = name self.hp = hp self.damage = damage self.alive = True
e1 = Enemy("Bat", 10, 3)e2 = Enemy("Wolf", 25, 7)e3 = Enemy("Troll", 50, 10)
print(e1.name, e2.name, e3.name)e1.alive = Falseprint(e1.name, "alive:", e1.alive)print(e2.name, "alive:", e2.alive) # Wolf все ще живий✏️ Основні завдання
Section titled “✏️ Основні завдання”- Створи
Enemy(name, hp, damage). 🙋 Підказка: Напиши__init__з трьома параметрами окрімself. - Створи 5 ворогів.
🙋 Підказка: П’ять рядків на кшталт
e1 = Enemy(...). - Додай
alive. 🙋 Підказка: Додайself.alive = Trueвсередині__init__. - Поясни
selfсвоїми словами. 🙋 Підказка: Спробуй замінитиselfна ім’я об’єкта — побачиш, що це працює, але кашується в довжину!
⭐ Challenge
Section titled “⭐ Challenge”Створи героя з name, hp, damage, speed, coins, level одним викликом конструктора.
🧪 Перед запуском
Section titled “🧪 Перед запуском”Хоча б раз за урок спробуй передбачити результат коду до запуску. Після запуску порівняй прогноз із реальністю.
🐞 Debug Mission
Section titled “🐞 Debug Mission”Навмисно зламай одну частину програми. Прочитай traceback або спостережи неправильну поведінку, знайди причину й виправ її.
✅ Урок завершено, якщо Марко може
Section titled “✅ Урок завершено, якщо Марко може”- пояснити головну ідею своїми словами;
- виконати основні завдання без копіювання готового рішення;
- змінити програму під нову вимогу;
- знайти й виправити хоча б одну власну помилку.
🏠 Домашня місія
Section titled “🏠 Домашня місія”Покращ Challenge однією власною ідеєю. Перед кодом сформулюй її одним реченням.
💡 Підказка для дорослого
Section titled “💡 Підказка для дорослого”Не виправляйте код одразу. Краще запитайте: «Що ти очікував? Що сталося? Який рядок за це відповідає? Що можна перевірити?»