Расскажите о принципах объектно-ориентированного программирования в Python.
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Принципы ООП в Python
-
Инкапсуляция: Объединение данных (атрибутов) и методов (функций), работающих с этими данными, в единый объект (класс). Скрытие внутренней реализации от внешнего мира, доступ к данным через методы.
class Car: def __init__(self, make, model): self._make = make # Приватный атрибут (соглашение) self._model = model def get_info(self): return f"{self._make} {self._model}" -
Наследование: Создание нового класса (потомка) на основе существующего класса (родителя). Потомок наследует атрибуты и методы родителя, может добавлять свои или переопределять существующие.
class ElectricCar (Car): # Наследование от класса Car def __init__(self, make, model, battery_size): super().__init__(make, model) # Вызов конструктора родителя self._battery_size = battery_size def get_info(self): return f"{super().get_info()}, Battery: {self._battery_size} kWh" # Переопределение метода -
Полиморфизм: Возможность использования объектов разных классов через общий интерфейс. Методы с одинаковыми именами в разных классах выполняют специфичные для этих классов действия.
class Dog: def make_sound(self): print("Woof!") class Cat: def make_sound(self): print("Meow!") def animal_sound(animal): animal.make_sound() dog = Dog() cat = Cat() animal_sound(dog) # Выведет "Woof!" animal_sound(cat) # Выведет "Meow!" -
Абстракция: Выделение общих характеристик объектов и создание абстрактных классов или интерфейсов, определяющих базовое поведение. Подчеркивание "что" делает объект, а не "как" он это делает. В Python реализуется через абстрактные базовые классы (ABC) из модуля
abc.from abc import ABC, abstractmethod class Shape(ABC): # Абстрактный базовый класс @abstractmethod def area(self): # Абстрактный метод pass @abstractmethod def perimeter(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): # Реализация абстрактного метода return 3.14 * self.radius ** 2 def perimeter(self): # Реализация абстрактного метода return 2 * 3.14 * self.radius