Класи в Python. Загальні поняття. Ключове слово class. Об’єкти класів. Об’єкти екземплярів
Зміст
- 1. Особливості використання класів у мові Python. Об’єкти класів та об’єкти екземплярів
- 2. Створення об’єкту класу. Загальна форма
- 3. Створення об’єкту екземпляру. Загальна форма
- 4. Особливості об’єктів класів
- 5. Особливості об’єктів екземплярів
- 6. Що таке атрибут класу? Приклад класу Circle
- 7. Приклад оголошення та використання простого класу, що зберігає деяке значення
- 8. Приклад реалізації класу, що зберігає набір даних. Клас SquareEquation – розв’язок квадратного рівняння
- Зв’язані теми
Пошук на інших ресурсах:
1. Особливості використання класів у мові Python. Об’єкти класів та об’єкти екземплярів
У мові програмування Python класи характеризуються наступними особливостями:
- класи представляють собою окремо визначені простори імен;
- класи підтримують створення набору об’єктів;
- простори імен класів можуть бути успадковані;
- в класах можна реалізовувати перевантаження функцій (методів);
- в класах можна реалізовувати перевантаження операторів.
Як відомо, у мові Python будь-який елемент (число, рядок, список і т.д) представлений об’єктом. Це стосується і об’єктно-орієнтованої моделі Python, в якій розрізняють два типи об’єктів:
- об’єкти класів. Ці об’єкти реалізують поведінку за замовчуванням. На основі об’єктів класів створюються об’єкти екземплярів. Іншими словами, об’єкти класів представляють собою фабрики зі створення об’єктів екземплярів;
- об’єкти екземплярів. Це об’єкти, які створюються на основі об’єктів класів. Об’єкти екземплярів мають власний (самостійний) простір імен а також успадковують імена (мають доступ) класів, з яких вони були створені.
⇑
2. Створення об’єкту класу. Загальна форма
Об’єкт класу створюється з допомогою інструкції, що містить ключове слово class. У найпростішому випадку загальна форма створення об’єкту класу має вигляд:
class ClassName: # Елементи (атрибути), що реалізовані в класі # ...
тут
- ClassName – ім’я класу, що створюється. Це є ім’я об’єкту класу. У цьому класі можна реалізовувати різні елементи класу, наприклад внутрішні дані, функції (методи), оператори тощо.
На основі імені ClassName може бути створений реальний об’єкт екземпляру.
⇑
3. Створення об’єкту екземпляру. Загальна форма
Об’єкт екземпляру створюється з допомогою виклику імені класу у правій частині операції присвоєння =. Кожен раз коли викликається ім’я класу, створюється новий екземпляр об’єкту цього класу.
Загальна форма створення об’єкту екземпляру наступна:
Obj = ClassName()
тут
- Obj – ім’я об’єкту екземпляру, який створюється об’єктом класом з іменем ClassName. Створений об’єкт екземпляру Obj має свій власний простір імен.;
- ClassName – ім’я об’єкту класу, який створюється з допомогою інструкції class.
⇑
4. Особливості об’єктів класів
У мові Python для об’єктів класів можна виділити наступні особливості:
- об’єкт класу створюється з допомогою інструкції class, яка визначена як виконувана інструкція (її можна викликати з програмного коду). Виклик інструкції class створює новий об’єкт класу;
- всередині інструкції class можна створювати атрибути об’єкту класу. Це здійснюється з допомогою операції присвоювання =. Доступ до атрибутів класу здійснюється за їх складеними (повними) іменами, наприклад Obj.NameAtr (атрибут з іменем NameAtr в об’єкті класу з іменем Obj);
- атрибути класу описують стан об’єкту. Під станом об’єкту мається на увазі поточне значення даних всередині об’єкту;
- атрибути класу описують поведінку об’єкту. Під поняттям “поведінка об’єкту” розуміється наявність методів, які обробляють екземпляри. Методи в класах визначаються з допомогою інструкції def.
⇑
5. Особливості об’єктів екземплярів
Об’єкт екземпляр є результатом виклику об’єкту класу. Для об’єктів екземплярів можна виділити наступні характерні особливості:
- об’єкт екземпляру створюється на основі виклику об’єкту класу як функції, що містить круглі дужки ( ). На основі одного об’єкту класу може бути створена будь-яка кількість об’єктів екземпляру;
- об’єкт екземпляру є конкретним елементом даних у програмі;
- при створенні кожен об’єкт екземпляру успадковує атрибути класу, на основі якого він створюється;
- об’єкт екземпляру має свій власний простір імен;
- присвоювання значень атрибутам відбувається через перший аргумент, яким може бути наприклад, посилання з іменем self (дивіться приклади нижче). Після присвоювання, створюється відповідний атрибут у кожному окремому об’єкті екземпляру. У цьому випадку, методи класу отримують першим аргументом посилання self (згідно з домовленістю), яке відповідає об’єкту екземпляру. З допомогою цього посилання (self) можна створювати або змінювати дані екземпляру об’єкту. Дані екземпляру класу з допомогою self створити (змінити) не можна.
⇑
6. Що таке атрибут класу? Приклад класу Circle
Атрибутом класу вважається елемент, що реалізований в класі. Таким елементом може бути метод, оператор, поле даних тощо.
Наприклад. Нехай задано клас з іменем Circle, що реалізує коло на координатній площині.
# Класи. Атрибути класу. Приклад. # Оголосити клас Circle, який реалізує коло на координатній площині class Circle: # Метод, що встановлює значення центру кола (x,y) та радіусу def Set(cr, x, y, radius): cr.x = x cr.y = y cr.radius = radius return # Отримати дані про коло у вигляді списку def Get(cr): return [cr.x, cr.y, cr.radius] # Повернути як список def Print(cr): print('x = ', cr.x, ', y = ', cr.y, ', radius = ', cr.radius) return # Обчислити площу круга def Area(cr): return 3.1415*cr.radius*cr.radius # Оголосити екземпляр об'єкту класу circle1 = Circle() # Встановити значення координат circle1.Set(2, 3, 5) # Вивести дані про коло circle1 circle1.Print() # Обчислити площу круга area = circle1.Area() print('circle1.Area() = ', area)
У вищенаведеному класі Circle реалізовано наступні атрибути:
- метод Set(), що встановлює значення атрибутів x, y, radius;
- метод Get(), що повертає дані про коло у вигляді списку;
- метод Print() – виводить інформацію про коло;
- метод Area() – виводить площу круга радіусу radius;
- внутрішні поля даних x, y – координата центру кола;
- поле даних radius – радіус кола.
У методах першим аргументом використовується параметр з іменем cr, який означає поточний екземпляр. Через це ім’я cr здійснюється доступ до даних: cr.x, cr.y, cr.radius. Ім’я cr може бути замінене на інше ім’я, наприклад self.
⇑
7. Приклад оголошення та використання простого класу, що зберігає деяке значення
У прикладі оголошується клас з іменем Value. У класі створюється комірка з даними, що містить деяке значення. Ім’я даних в класі value. Щоб доступитись до даних використовується параметр self, який представляє собою поточний екземпляр класу. Допускається використання іншого імені замість імені self (наприклад, self2).
# Класи. Оголошення класу. Використання класу # Оголосити клас Value, який зберігає деяке значення class Value: # Оголошення методу в класі Value def SetValue(self, val): self.value = val # self.value - значення, що зберігається # Метод, що повертає значення value def GetValue(self): return self.value def Print(self): print("value = ", self.value) # Випадок 1. Виклик методів через об'єкт екземпляру obj1 = Value() # Оголосити об'єкт класу Value obj1.SetValue(25) # Встановити нове значення в об'єкті класу obj1.Print() # value = 25 # Випадок 2. Виклик методу SetValue() через об'єкт класу obj2 = Value() # Оголосити об'єкт класу Value Value.SetValue(obj2, 37) Value.Print(obj2) # value = 37
Результат виконання програми
value = 25 value = 37
На рисунку 1 зображено об’єкти, які створюються у вищенаведеному прикладі.
Рисунок 1. Структура програми: об’єкти екземпляру та об’єкт класу
⇑
8. Приклад реалізації класу, що зберігає набір даних. Клас SquareEquation – розв’язок квадратного рівняння
У прикладі створюється екземпляр класу, який призначений для розв’язку квадратного рівняння. У класі з допомогою імені екземпляру self створюються три члени даних з іменами a, b, c.
Також у методах класу використовуються додаткові внутрішні змінні з іменами d, x1, x2. Це тільки тимчасові локальні змінні. Вони не є даними екземпляру класу і не впливають на стан конкретного екземпляру об’єкту. Внутрішній стан будь-якого екземпляру об’єкту визначається даними a, b, c.
# Класи. Приклад. import math # Оголосити клас SquareEquation, який розв'язує квадратне рівняння class SquareEquation: # Метод ініцалізації даних класу def __init__(self, a, b, c): # створюється три члени даних класу self.a = a self.b = b self.c = c return # Метод обчислення коренів рівняння def Calc(self): # d - дискримінант, додаткова локальна змінна d = self.b*self.b - 4*self.a*self.c if (d<0): print("The equation has no roots") return [] else: # x1, x2 - локальні змінні - це не є члени даних класу x1 = (-self.b - math.sqrt(d))/(2.0*self.a) x2 = (-self.b + math.sqrt(d))/(2.0*self.a) return [x1, x2] # Використання класу SquareEquation equation1 = SquareEquation(1, 1, -2) # конкретний екземпляр об'єкту result = equation1.Calc() print('result = ', result)
Результат роботи програми
result = [-2.0, 1.0]
⇑
Зв’язані теми
⇑