Skip to main content

Класи

Класи — це структура мови програмування, яка дозволяє об'єднати в рамках однієї сутності змінні різних типів (поля) та функції (методи). Ви вже знайомі з тим, як працювати з класами у Python і неодноразово використовували їх. Справа в тому, що майже все у Python — це об'єкт класу.

Створити клас дуже просто. Достатньо написати інструкцію class та додати ім'я.

class FirstClass:

pass

Для імені класів в Python застосовують нотацію CamelCase - кожне слово починається з великої літери.

У прикладі вище тіло класу складається з одного оператора pass. Він потрібний для того, щоб інтерпретатор Python не видавав помилки. Фактично це порожній клас, який не має ні атрибутів (характеристик), ні методів.

Ми можемо добавити поле x.

class FirstClass:

x = 10

Тепер ми використати цей клас для створення об’єкту.

p = FirstClass()

print(p.x) # 10

p.x = 15

print(p.x) # 15

Атрибути класу (поля та методи)

Поля та методи класів називаються одним загальним словом "атрибути" класу. В у визначенні класів у блоці коду під ім'ям класу відбувається визначення атрибутів класу.

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

Метод класу — це функція, яка оперує з полями класу і/або аргументами, які передаються у метод.

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

Методи класу — це функції, які описують поведінку класу та як він взаємодіє з іншими об'єктами. Щоб метод класу міг працювати з іншими методами та полями класу, першим аргументом будь-якого методу завжди виступає сам об'єкт класу (ну майже завжди).

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

У будь-якого методу класу завжди має бути, принаймні, один аргумент (self), це вимога синтаксису Python, оскільки інтерпретатор під час виклику методу обов'язково передасть першим аргументів сам об'єкт, а потім уже всі аргументи, які були передані при виклику. параметрів. Однак, при виклику методу ніякого значення цьому параметру надавати не треба — його додасть сам Python. Ця змінна вказує на сам об'єкт екземпляра класу.

class FirstClass:

x = 10

def mult(self, y):

return self.x * y

p = FirstClass()

print(p.x) # 10

print(p.mult(5)) # 50

Усі класи мають функцію під назвою __init__(), яка завжди виконується під час створення об'єкта. Функцію __init__() використовують для додавання значень властивостям об'єкта або інших операцій, які необхідно виконати під час створення об'єкта.

Тут метод __init__() — спеціальний метод конструктор, який автоматично виконується під час створення кожного нового екземпляра на базі класу. Ім'я методу починається і закінчується двома символами підкреслення. Причина в тому, що так ми запобігаємо конфліктам імен стандартних методів Python та методів ваших класів.

class FirstClass:

def __init__(self, x):

self.x = x

p = FirstClass(10)

print(p.x) # 10

Основна сила об'єктно-орієнтованого програмування полягає саме в можливості успадкування класів. Успадкування дає можливість створювати нові класи, що містять атрибути батьківських класів.

class SecondClass(FirstClass):

name = ‘’

Клас SecondClass успадковується від FirstClass і до поля x додає поле name.

"Магічні" методи

Методи, які відповідають за поведінку об'єктів, коли до них застосовуються синтаксичні конструкції Python, прийнято називати "магічними". Звичайно, нічого магічного в них немає. Магічними вони називаються, оскільки немає способу дізнатися, що, наприклад, метод __add__ відповідає за те, як поведеться об'єкт, якщо до нього застосувати оператор +. Ці та подібні методи можна знайти в довідниках та підручниках з Python, але ніяк самої структури мови. Вираз a + b "під капотом" перетворюється на a.__add__(b) і цей факт сам собою виглядає як "магія". Така поведінка — це частина мови Python і знати, які "магічні" методи за що відповідають — дуже важливо та обов'язково для розробника.

Найчастіше використовуваний метод — це метод __init__. Цей метод відповідає за ініціалізацію об'єкта. Коли ви створюєте об'єкт класу, спочатку створюється порожній об'єкт, який містить лише обов'язкові службові атрибути. Після цього (об'єкт вже створено) автоматично викликається метод __init__, яким ви можете модифікувати під ваші потреби.

Коли ви в інтерактивному режимі роботи з Python хочете побачити вміст деякого об'єкта, ви просто пишете його ім'я в консолі та інтерпретатор виводить рядком подання цього об'єкта. За цей механізм внутрішнього читального уявлення об'єктів відповідає магічний метод __repr__. Цей метод приймає лише один аргумент (self звичайно) і повертати повинен рядок.

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