Конструктор класу – метод __init__()
В об'єктно-орієнтованому програмуванні конструктором класу називають метод, який автоматично викликається під час створення об'єктів. Його можна назвати конструктором об'єктів класу. Назва такого методу зазвичай регламентується синтаксисом конкретної мови програмування. Так у Java ім'я конструктора класу збігається з ім'ям самого класу. У Python роль конструктора грає метод __init__().
У Python наявність пар знаків підкреслення спереду та ззаду в імені методу говорить про те, що він належить до групи методів перевантаження операторів. Якщо такі методи визначено у класі, то об'єкти можуть брати участь у таких операціях як додавання, віднімання, викликатися як функції та інших.
При цьому методи навантаження операторів не потрібно викликати на ім'я. Викликом для них є сам факт участі об'єкта у певній операції. Що стосується конструктора класу – це операція створення об'єкта. Так як об'єкт створюється в момент виклику класу на ім'я, то в цей момент викликається метод __init__(), якщо він визначений у класі.
Необхідність конструкторів пов'язана з тим, що нерідко об'єкти повинні мати власні властивості одночасно. Нехай є клас Person, об'єкти якого обов'язково повинні мати ім'я та прізвище. Якщо клас буде описаний таким чином
створення об'єкта можливе без полів. Для встановлення імені та прізвища метод setName() потрібно викликати окремо:
У свою чергу конструктор класу не дозволить створити об'єкт без обов'язкових полів:
Тепер, якщо ми спробуємо створити об'єкт, не передавши нічого в конструктор, буде порушено виняток, і об'єкт не буде створено:
Однак буває, що треба допустити створення об'єкта, навіть якщо жодні дані конструктор не передаються. У такому разі параметрам конструкторакласу задаються значення за промовчанням:
Якщо клас викликається без значень у дужках, для параметрів будуть використані їх значення за промовчанням. Однак поля width і height будуть у всіх об'єктів.
Крім того, конструктору зовсім не обов'язково приймати будь-які параметри, крім self. Значення поля можуть призначатися як завгодно. Також не обов'язково, щоб у конструкторі відбувалося встановлення атрибутів об'єкта. Там може бути, наприклад, код, який породжує створення інших класів.
Практична робота. Конструктор та деструктор
Крім конструктора об'єктів у мовах програмування є зворотний метод – деструктор. Він викликається, коли об'єкт створюється, а знищується.
У мові програмування Python об'єкт знищується, коли зникають усі пов'язані з ним змінні або їм надається інше значення, внаслідок чого зв'язок зі старим об'єктом втрачається. Видалити змінну можна за допомогою команди del.
У класах Python функцію деструктора виконує метод __del__().
Напишіть програму за таким описом:
Є клас Person, конструктор якого приймає три параметри (не враховуючи self) – ім'я, прізвище та кваліфікацію спеціаліста. Кваліфікація має значення задане за умовчанням, що дорівнює одиниці.
У класу Person є метод, який повертає рядок, що включає всю інформацію про співробітника.
Клас Person містить деструктор, який виводить на екран фразу "До побачення, містере ..." (замість троєточки повинні виводитися ім'я та прізвище об'єкта).
В основній гілці програми створіть три об'єкти класу Person. Перегляньте інформацію про співробітників і звільніть найслабшу ланку.
Наприкінці програми додайте функцію input(), щоб скрипт не завершився сам,доки не буде натиснутий Enter. Інакше ви відразу побачите, як видаляються всі об'єкти при завершенні роботи програми.
У Python деструктор використовується рідко, оскільки інтерпретатор і без нього добре прибирає "сміття".
Курс із прикладами рішень практичних робіт: android-додаток, pdf-версія.