JavaRush /Курси /Модуль 1: Python Core /Ініціалізація об'єкта

Ініціалізація об'єкта

Модуль 1: Python Core
Рівень 9 , Лекція 3
Відкрита

4.1 Ініціалізація

Зазвичай одразу після створення об'єкти ще не готові до роботи. Спочатку в них потрібно передати всі необхідні дані: параметри роботи, стартові значення, посилання на інші об'єкти тощо.

Цей процес називається ініціалізацією і має відбуватися одразу після створення об'єкта.

Припустімо, у вас є клас Кіт (Cat), і ви хочете задати йому ім'я та вік, це можна зробити кількома способами:

Ініціалізація атрибутів після створення об'єкта

У цьому прикладі спочатку створюється порожній об'єкт Cat, а потім атрибути name і age додаються безпосередньо до об'єкта.


class Cat:
    pass
        

# Створення об'єкта Cat
barsik = Cat()
        
# Ініціалізація атрибутів після створення об'єкта
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Ім'я кота: {barsik.name}, вік: {barsik.age}")  # Вивід: Ім'я кота: Barsik, вік: 5

Використання методу для ініціалізації атрибутів

У цьому прикладі для ініціалізації атрибутів використовується метод initialize. Об'єкт Cat створюється без жодного атрибута, а потім метод initialize() використовується для задання значень атрибутів.


class Cat:
    def initialize(self, name, age):
        self.name = name
        self.age = age
        

# Створення об'єкта Cat
barsik = Cat()
        
# Ініціалізація атрибутів через метод
barsik.initialize("Barsik", 5)
        
print(f"Ім'я кота: {barsik.name}, вік: {barsik.age}")  # Вивід: Ім'я кота: Barsik, вік: 5

Використання полів класу

У цьому прикладі атрибути name і age визначені на рівні класу. Після створення об'єкта barsik атрибути ініціалізуються безпосередньо.


class Cat:
    name = ""
    age = 0
        

# Створення об'єкта Cat
barsik = Cat()
        
# Ініціалізація атрибутів об'єкта
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Ім'я кота: {barsik.name}, вік: {barsik.age}")  # Вивід: Ім'я кота: Barsik, вік: 5

Який спосіб кращий? Жоден! Краще всього використовувати конструктор :)

4.2 Конструктор

Конструктор — це спеціальний метод, який автоматично викликається при створенні нового об'єкта класу. Конструктор використовується для ініціалізації полів об'єкта і може виконувати будь-які початкові дії, необхідні для налаштування об'єкта.

У Python конструктором є метод з іменем __init__. Ось основні факти про нього:

  • Метод __init__ — це конструктор у Python. Він викликається автоматично, коли створюється новий екземпляр класу.
  • __init__ приймає принаймні один параметр — self, який посилається на створюваний об'єкт. Додатково можуть бути передані інші параметри для ініціалізації атрибутів об'єкта.
  • Всередині методу __init__ можна задавати початкові значення атрибутів об'єкта, використовуючи self.
  • Конструктор може виконувати будь-які дії, необхідні для налаштування об'єкта, наприклад, перевірку вхідних даних або встановлення зв'язків з іншими об'єктами.

Параметри передаються конструктору автоматично, вам потрібно лише вказати їх всередині круглих дужок під час створення об'єкта.

Ось як виглядатиме ініціалізація нашого кота з використанням конструктора:


class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age


# Створення об'єкта Cat з ім'ям і віком
barsik = Cat("Barsik", 5)

print(f"Ім'я кота: {barsik.name}, вік: {barsik.age}")  # Вивід: Ім'я кота: Barsik, вік: 5

Після створення об'єкта типу Cat буде автоматично викликано метод __init__, і в нього передадуться три параметри:

  • Посилання на об'єкт barsik в параметр self
  • Рядок «Барсик» в параметр name
  • Число 5 в параметр age

Це зручно і красиво.

Валідація даних

Також у конструкторі можна виконувати валідацію даних. Адже мета конструктора — це сформувати валідний (правильний) об'єкт, з яким далі можна працювати. Приклад:


class Cat:
    def __init__(self, name, age):
        if age < 0: raise ValueError("Вік не може бути від'ємним")
        self.name = name
        self.age = age


# Створення об'єкта Cat з перевіркою віку
try:
    barsik = Cat("Barsik", -3)
except ValueError as e:
    print(e)  # Вивід: Вік не може бути від'ємним
               
Коментарі (3)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Євген Рівень 26
6 липня 2025
взагалі незрозуміло що таке try та except - в лекціях такого не було
Semen Рівень 21
4 липня 2025
Напевне, що в попередніх лекціях треба було розповісти про роботу з виключними ситуаціями та їх обробку, а потім вже розповідати про них в контексті класів...Якось недолуго побудована структура лекцій...
Alex Stasyuk Рівень 25
17 грудня 2025
так зробіть через if else. Програма проходить тести нормально