Назад к вопросам
Junior
130
questionbank

Расскажите о принципах объектно-ориентированного программирования в 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