Об'єктно-орієнтоване програмування (OOP) в Python базується на основних принципах: Клас, Об'єкт, Метод, Наслідування, Поліморфізм, Абстракція даних та Інкапсуляція. Давайте розглянемо їх простими словами.
1. Клас і Об'єкт
- Клас: Це план або шаблон для створення об'єктів. Він визначає властивості та поведінку.
- Об'єкт: Це екземпляр класу. Він зберігає дані (атрибути) та виконує дії (методи), визначені в класі.
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} is barking!")
# Створення об'єкта з класу Dog
my_dog = Dog("Buddy", 5)
my_dog.bark() # Вивід: Buddy is barking!
2.
Метод
- Функції, визначені всередині класу, які працюють з даними об'єкта.
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
circle = Circle(10)
print(circle.area()) # Вивід: 314.0
3. Наслідування
- Дозволяє класу успадковувати атрибути та методи від іншого класу.
- Сприяє повторному використанню коду та зменшує дублювання.
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
def speak(self):
print("Dog barks")
d = Dog()
d.speak() # Вивід: Dog barks
4.
Поліморфізм
- Дозволяє об'єктам бути обробленими як екземпляри їх батьківського класу.
- Дає можливість різним класам визначати однакові методи різними способами.
class Shape:
def area(self):
pass
class Circle(Shape):
def area(self):
return 3.14 * 5 ** 2
class Square(Shape):
def area(self):
return 4 ** 2
shapes = [Circle(), Square()]
for shape in shapes:
print(shape.area()) # Вивід: 78.5, 16
5. Абстракція даних
- Приховує складність реалізації та надає тільки необхідні деталі.
- Орієнтовано на те, що об'єкт робить, а не на те, як це відбувається.
class Car:
def __init__(self, brand):
self._brand = brand # Інкапсуляція даних
def display(self):
print(f"Car brand: {self._brand}")
my_car = Car("Toyota")
my_car.display() # Вивід: Car brand: Toyota
6.
Інкапсуляція
- Об'єднання даних (атрибутів) та методів (функцій) в межах одного класу.
- Приховує внутрішній стан об'єкта від зовнішнього доступу.
class BankAccount:
def __init__(self, balance):
self._balance = balance # Приватний атрибут
def deposit(self, amount):
self._balance += amount
def get_balance(self):
return self._balance
account = BankAccount(1000)
account.deposit(500)
print(account.get_balance()) # Вивід: 1500
Перекладено з: [Oops Concepts in Python](https://medium.com/@sb.gorkhali/oops-concepts-in-python-6d4e9b14ac89?source=rss------oop-5)