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

Какие принципы объектно-ориентированного программирования ты знаешь?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Инкапсуляция, наследование, полиморфизм.

  • Инкапсуляция: Объединение данных (атрибутов) и методов, работающих с этими данными, в единую сущность — объект. Скрытие внутренней реализации объекта от внешней среды.

    class Car:
        def __init__(self, make, model):
            self._make = make  # Защищенный атрибут
            self._model = model # Защищенный атрибут
    
        def get_description(self):
            # Метод предоставляет доступ к данным
            return f"Марка: {self._make}, Модель: {self._model}"
    
    # Внешний код взаимодействует через методы
    my_car = Car("Toyota", "Camry")
    print(my_car.get_description())
    
  • Наследование: Возможность создавать новые классы (наследники), которые наследуют атрибуты и методы существующих классов (родителей).

    class Animal:
        def speak(self):
            pass # Базовый метод
    
    class Dog(Animal):
        def speak(self):
            return "Гав!" # Переопределение метода
    
    class Cat(Animal):
        def speak(self):
            return "Мяу!" # Переопределение метода
    
    # Использование унаследованных и переопределенных методов
    my_dog = Dog()
    my_cat = Cat()
    print(my_dog.speak())
    print(my_cat.speak())
    
  • Полиморфизм: Возможность объектов разных классов реагировать на одно и то же сообщение (вызов метода) по-разному.

    class Shape:
        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):
            import math
            return math.pi * self.radius**2 # Реализация для круга
    
    # Объекты разных классов, вызывающие один и тот же метод "area"
    rectangle = Rectangle(5, 10)
    circle = Circle(7)
    
    shapes = [rectangle, circle]
    
    # Поведение метода "area" зависит от типа объекта
    for shape in shapes:
        print(f"Площадь: {shape.area()}")