Python — це універсальна мова програмування, яка підтримує різні парадигми програмування, включаючи об’єктно-орієнтоване програмування (скор. “ООП”) з використанням об’єктів та класів.
Об’єкт — це будь-яка сутність, яка має атрибути (дані) та поведінку (методи/функції). Наприклад, кошеня — це об’єкт. В нього є:
атрибути — ім’я, вік, колір тощо.
поведінка — бігає, нявкає, спить і т.д.
Клас — це креслення (план) цього об’єкта.
Клас та об’єкти в Python
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Cat: # Атрибути (дані) класу name = "" age = 0 # Створення об'єкта cat1 cat1 = Cat() cat1.name = "Blu" cat1.age = 10 # Створення іншого об'єкта — cat2 cat2 = Cat() cat2.name = "Woo" cat2.age = 15 # Доступ до атрибутів класу Cat print(f"{cat1.name} is {cat1.age} years old") print(f"{cat2.name} is {cat2.age} years old") |
Результат:
Blu is 10 years old
Woo is 15 years old
Ми створили клас Cat з двома атрибутами: name та age. Потім ми створили екземпляри (об’єкти) класу Cat: cat1 та cat2 — це посилання на наші нові об’єкти. Ми звертаємось до атрибутів екземплярів та присвоюємо їм значення, використовуючи ім’я екземпляра та оператор ..
Спадкування в Python
Спадкування — це спосіб створення нового класу, використовуючи дані вже існуючого класу без внесення змін до нього. Створюваний клас є дочірнім (або “похідним”) класом, а існуючий клас є батьківським (або “базовим”) класом.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# Батьківський клас class Animal: def eat(self): print( "I can eat!") def sleep(self): print("I can sleep!") # Дочірній клас class Dog(Animal): def bark(self): print("I can bark! Woof woof!!") # Створюємо об'єкт класу Dog dog1 = Dog() # Викликаємо методи батьківського класу dog1.eat() dog1.sleep() # Викликаємо метод дочірнього класу dog1.bark(); |
Результат:
I can eat!
I can sleep!
I can bark! Woof woof!
Тут dog1 (об’єкт дочірнього класу Dog) має доступ до членів батьківського класу Animal через те, що клас Dog успадкований від класу Animal.
|
1 2 3 |
# Виклик методів класу Animal dog1.eat() dog1.sleep() |
Інкапсуляція в Python
Інкапсуляція — це об’єднання атрибутів і методів всередині класу, яке запобігає доступу зовнішніх класів до атрибутів і методів даного класу та їх зміні. Іншими словами, це “приховування даних”.
В Python приватні (private) атрибути позначаються за допомогою одинарного _ або подвійного __ підкреслень розміщених на місці префіксу. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("Selling Price: {}".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # Змінюємо ціну c.__maxprice = 1000 c.sell() # Використовуємо функцію-сеттер c.setMaxPrice(1000) c.sell() |
Результат:
Selling Price: 900
Selling Price: 900
Selling Price: 1000
Тут ми визначили клас Computer і використали метод __init__() для збереження ціни комп’ютера. Зверніть увагу на наступний рядок коду:
|
1 |
c.__maxprice = 1000 |
Тут ми спробували змінити значення __maxprice поза класом. Однак, оскільки __maxprice є приватною змінною, у нас нічого не вийшло. Для зміни ціни необхідно використовувати функцію-сеттер, тобто setMaxPrice(), яка приймає ціну як параметр.
Поліморфізм в Python
Поліморфізм означає наявність більш як однієї форми, тобто одна і та ж сутність (метод, оператор чи об’єкт) може виконувати різні дії у різних ситуаціях. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Polygon: # Метод рендерингу полігону def render(self): print("Rendering Polygon...") class Square(Polygon): # Метод рендерингу квадрата def render(self): print("Rendering Square...") class Circle(Polygon): # Метод рендерингу кола def render(self): print("Rendering Circle...") # Створюємо об'єкт класу Square s1 = Square() s1.render() # Створюємо об'єкт класу Circle c1 = Circle() c1.render() |
Результат:
Rendering Square...
Rendering Circle...
Тут ми створили батьківський клас Polygon та два дочірні класи: Square і Circle. Зверніть увагу на використання методу render(), основною метою якого є малювання (рендеринг) фігури. Проте процес рендерингу квадрата (Square) відрізняється від процесу рендерингу кола (Circle). Метод render() поводиться по-різному в різних класах. Можна сказати, що метод render() є поліморфним.

(29 оцінок, середня: 4,83 з 5)