Опис класів та створення об’єктів
Програмування мовою Python є об’єктно-орієнтованим, тобто всі величини є об’єктами певного класу.
Клас — це тип даних, створений користувачем. Клас описує властивості об’єктів, створених на його основі, та дії, які об’єкти класу можуть виконувати.
Класи можна використовувати для організації фрагментів кода в Python-програмі.
Приклад:
Модуль tkinter містить описи класів графічних компонентів, і ми створюємо віджети як екземпляри цих класів. Кожний компонент графічного інтерфейсу — це об’єкт певного класу графічних компонентів, що має властивості та методи: об’єкт Label є екземпляром класу Label, об’єкт Button є екземпляром класу Button.
Під час створення об’єктів можна задати значення їхніх властивостей для налаштування вигляду, та описати методи — прикріплені до цих віджетів обробники подій. У тілі класу описуються атрибути, методи та конструктор.
Метод __init__ називається конструктором класу. Назва методу починається й закінчується двома символами підкреслення.
Синтаксис опису класу:
сlass <Назва_класу>():
def __init__ (self, <перелік атрибутів (властивостей) класу >):
сlass <Назва_класу>():
def __init__ (self, <перелік атрибутів (властивостей) класу >):
self.<змінна = <значення>
Метод __init__ називається конструктором класу. Назва методу починається й закінчується двома символами підкреслення.
Конструктор класу — спеціальний метод класу, який автоматично викликається при створенні екземпляра даного класу.
Конструктор потрібен для створення об'єкта. Призначення конструктора — встановити початковий стан об'єкта шляхом ініціалізації атрибутів об'єкта.
Зверни увагу!
Перший параметр конструктора у всіх випадках self (Під час виклику методу для певного екземпляра класу self отримує посилання саме на цей екземпляр. Таким чином метод «дізнається», для якого об'єкта його викликано.).
Конструктор передає значення аргументів властивостям створюваного об'єкта.
В одному класі завжди тільки один конструктор.
Конструктор передає значення аргументів властивостям створюваного об'єкта.
В одному класі завжди тільки один конструктор.
Атрибути класу — це імена змінних, у яких зберігаються значення властивостей об’єктів.
Рис.1
Синтаксис команди створення екземпляра класу такий:
<змінна> = <Назва класу>([<перелік значень атрибутів>])
Далі в програмі з’являється об’єкт, доступ до якого можна отримати за назвою змінної. Об’єкт отримує атрибути його класу.
Рис.2
Значення атрибутів об’єкта можна вивести на екран:
print("r1.width = ", r1.width)
print("r1.height = ", r1.height)
Можна змінити значення атрибутів:
r1.width = 25
Значення атрибутів об’єкта можна присвоювати змінним, що не є об’єктами:
х = r1.width
Методи класу
Методи — це дії, які можуть виконувати об’єкти даного класу.
Методи можуть змінювати властивості (значення атрибутів) об’єкта, виконувати інші дії над об’єктами. Змінюючи атрибути, пов’язані з конкретним екземпляром класу, ми можемо змінювати стан об’єктів у програмі.
Синтаксис опису методу класу такий:
def ім’я_методу(self):
def ім’я_методу(self):
<тіло методу>
Виклик методу для конкретного об’єкта в основному блоці програми має вигляд: об’єкт.ім’я_методу(…)
Опис методу класу розташовується в описі класу (рис.1). Від звичайної функції метод класу відрізняється наявністю параметра self. При виклику методу класу параметру self автоматично присвоюється значення змінної екземпляра — інформація про об’єкт, який викликає метод. Замість self у разі виконання методу підставляється ім’я конкретного об’єкта.
Зверни увагу!
Метод класу нагадує класичну функцію, але насправді — це функція класу. Для використання її необхідно викликати через об'єкт.
Перший параметр методу завжди self (ключове слово, яке посилається на об'єкт, який викликав метод).
Перший параметр методу завжди self (ключове слово, яке посилається на об'єкт, який викликав метод).
Приклад:
S = r1.getArea()
print("S= ", r1.getArea())
Приклад:
Описати клас Ball, який представляє кола заданого радіусу і кольору. Створити список з 10 об’єктів класу Ball з випадковими координатами (рис.3).
from tkinter import *
class Ball:
def __init__(self, canvas, x,y,color):
self.canvas = canvas
self.id = canvas.create_oval(x, y, x+50, y+50, fill=color)
self.dy =2
tk = Tk()
canvas = Canvas(tk, width=500, height=400)
canvas.pack()
from tkinter import *
class Ball:
def __init__(self, canvas, x,y,color):
self.canvas = canvas
self.id = canvas.create_oval(x, y, x+50, y+50, fill=color)
self.dy =2
tk = Tk()
canvas = Canvas(tk, width=500, height=400)
canvas.pack()
list_ball=[]
colors = ['red', 'orange', 'yellow', 'green', 'blue']
for i in range (10):
x=random.randint(10,400)
y=random.randint(10,350)
list_ball.append(Ball(canvas, x, y, colors[i%5]))
colors = ['red', 'orange', 'yellow', 'green', 'blue']
for i in range (10):
x=random.randint(10,400)
y=random.randint(10,350)
list_ball.append(Ball(canvas, x, y, colors[i%5]))
Рис.3
Джерела:
Інформатика : підруч. для 7 кл. закл. загал. серед. освіти / [О. О. Бондаренко, В. В. Ластовецький, О. П. Пилипчук, Є. А. Шестопалов]. — Харків : Вид-во «Ранок», 2020.