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) # Вивід: Вік не може бути від'ємним
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ