7. Объектно-ориентированное программирование (ООП) #
Объектно-ориентированное программирование — это парадигма, которая организует код вокруг объектов, представляющих сущности из реального мира. Python поддерживает ООП, предоставляя возможности для создания классов, объектов, наследования, полиморфизма и работы с магическими методами.
7.1. Классы и объекты #
Класс — это шаблон, определяющий свойства и поведение объектов. Объект — это экземпляр класса.
Создание класса #
class Person:
def __init__(self, name, age): # Конструктор
self.name = name # Атрибут объекта
self.age = age
def greet(self): # Метод объекта
return f"Hello, my name is {self.name} and I am {self.age} years old."
Создание объекта #
person = Person("Alice", 30) # Создаем объект
print(person.greet()) # Вызов метода
Атрибуты и методы #
- Атрибуты — переменные, связанные с объектом.
- Методы — функции, которые работают с объектом.
Изменение атрибутов #
person.age = 31 # Изменяем значение атрибута
print(person.greet()) # Hello, my name is Alice and I am 31 years old.
7.2. Наследование #
Наследование позволяет создавать классы, которые наследуют свойства и методы другого класса.
Пример наследования #
class Employee(Person): # Employee наследует Person
def __init__(self, name, age, position):
super().__init__(name, age) # Вызов конструктора родительского класса
self.position = position
def work(self):
return f"{self.name} works as a {self.position}."
Использование наследования #
employee = Employee("Bob", 25, "Developer")
print(employee.greet()) # Вызов метода из родительского класса
print(employee.work()) # Вызов метода из дочернего класса
7.3. Полиморфизм #
Полиморфизм позволяет объектам разных классов обрабатывать одинаковые методы по-своему.
Пример полиморфизма #
class Dog:
def sound(self):
return "Woof!"
class Cat:
def sound(self):
return "Meow!"
animals = [Dog(), Cat()]
for animal in animals:
print(animal.sound()) # Вызов метода sound для каждого объекта
7.4. Магические методы #
Магические методы (или методы-дандеры) начинаются и заканчиваются двойным подчеркиванием (__
) и определяют специальное поведение объектов.
Примеры магических методов #
__init__
— конструктор.def __init__(self, name): self.name = name
__str__
— строковое представление объекта.class Person: def __init__(self, name): self.name = name def __str__(self): return f"Person: {self.name}" person = Person("Alice") print(person) # Person: Alice
__repr__
— представление объекта для отладки.class Person: def __repr__(self): return f"Person(name='{self.name}')"
__add__
— сложение объектов.class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) def __str__(self): return f"Vector({self.x}, {self.y})" v1 = Vector(1, 2) v2 = Vector(3, 4) print(v1 + v2) # Vector(4, 6)
__len__
— длина объекта.class CustomList: def __init__(self, items): self.items = items def __len__(self): return len(self.items) my_list = CustomList([1, 2, 3]) print(len(my_list)) # 3
Распространенные магические методы #
__getitem__
,__setitem__
— доступ к элементам (например, в списке).__eq__
,__lt__
,__gt__
— сравнение объектов.__iter__
,__next__
— итерация по объекту.
Объектно-ориентированное программирование делает код более структурированным, удобным для сопровождения и повторного использования. Магические методы добавляют гибкости, позволяя реализовывать пользовательское поведение для встроенных операций.