Обектно-ориентирано програмиране (ООП) в Python

Урок 4: Обектно-ориентирано програмиране (ООП) в Python
Обектно-ориентираното програмиране (ООП) е парадигма за програмиране, която използва „обекти“ и „класове“. Обектите са конкретни екземпляри на класовете и могат да съдържат данни и методи за работа с тези данни. В този урок ще се запознаем с основните концепции на ООП и ще разгледаме как да ги приложим в Python.
Класове и обекти
Дефиниране на клас
Класовете в Python се дефинират с ключовата дума class
, последвана от името на класа и двоеточие.
class Person:
pass # Използваме 'pass', за да създадем празен клас
Създаване на обект
Обектите се създават като извикаме класа, като използваме скоби:
person1 = Person()
person2 = Person()
Конструктор и атрибути
Конструкторът е специален метод, който се изпълнява при създаването на обект. В Python той се нарича __init__
.
Дефиниране на конструктор и атрибути
class Person:
def __init__(self, name, age):
self.name = name # Атрибут на класа
self.age = age # Атрибут на класа
Създаване на обект с параметри
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
print(person1.name) # Отпечатва "Alice"
print(person2.age) # Отпечатва 25
Методи в класове
Методите са функции, които са дефинирани в рамките на клас и оперират с обектите на този клас.
Дефиниране на метод
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
Извикване на метод
person1 = Person("Alice", 30)
person1.greet() # Отпечатва "Hello, my name is Alice and I am 30 years old."
Наследяване
Наследяването е механизъм, при който един клас (подклас) наследява атрибутите и методите на друг клас (базов клас).
Дефиниране на базов и подклас
class Employee(Person):
def __init__(self, name, age, job_title):
super().__init__(name, age) # Викаме конструктора на базовия клас
self.job_title = job_title
def work(self):
print(f"{self.name} is working as a {self.job_title}.")
Създаване на обект на подклас
employee1 = Employee("Charlie", 28, "Software Developer")
employee1.greet() # Отпечатва "Hello, my name is Charlie and I am 28 years old."
employee1.work() # Отпечатва "Charlie is working as a Software Developer."
Инкапсулация
Инкапсулацията е концепция, при която данните в класа са скрити от външния свят и могат да бъдат достъпвани само чрез методи на класа.
Пример за инкапсулация
class Person:
def __init__(self, name, age):
self.__name = name # Приватен атрибут
self.__age = age # Приватен атрибут
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
def get_age(self):
return self.__age
def set_age(self, age):
if age > 0:
self.__age = age
else:
print("Invalid age")
person1 = Person("Alice", 30)
print(person1.get_name()) # Отпечатва "Alice"
person1.set_age(35)
print(person1.get_age()) # Отпечатва 35
Полиморфизъм
Полиморфизмът е концепция, при която различни класове могат да имат методи със същото име, но с различно поведение.
Пример за полиморфизъм
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
animals = [Dog(), Cat()]
for animal in animals:
print(animal.speak()) # Отпечатва "Woof!" и "Meow!"
Абстракция
Абстракцията е концепция, при която се дефинират абстрактни класове и методи, които трябва да бъдат имплементирани в подкласи.
Пример за абстракция
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius * self.radius
shapes = [Rectangle(3, 4), Circle(5)]
for shape in shapes:
print(shape.area()) # Отпечатва 12 и 78.5
Практическа програма: Управление на библиотека с ООП
Нека създадем програма за управление на библиотека с книги, използвайки ООП концепциите.
Дефиниране на класове
book.py
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def __str__(self):
return f"{self.title} by {self.author}"
library.py
from book import Book
class Library:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
def remove_book(self, title):
self.books = [book for book in self.books if book.title != title]
def list_books(self):
for book in self.books:
print(book)
Основна програма
main.py
from book import Book
from library import Library
library = Library()
book1 = Book("The Great Gatsby", "F. Scott Fitzgerald")
book2 = Book("1984", "George Orwell")
library.add_book(book1)
library.add_book(book2)
print("Books in library:")
library.list_books()
library.remove_book("1984")
print("\nBooks in library after removal:")
library.list_books()
Заключение
В този урок разгледахме основните концепции на обектно-ориентираното програмиране (ООП) в Python. Научихме как да дефинираме класове и обекти, как да използваме конструктори и методи, какво представлява наследяването, инкапсулацията, полиморфизмът и абстракцията. В следващите уроци ще продължим да разширяваме нашите знания за Python и ще се запознаем с работа с файлове, бази данни и мрежово програмиране. Практикувайте редовно и експериментирайте с различни класове и обекти, за да затвърдите наученото.
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut