
Введение
Программирование — это как семейный бизнес: что-то передаётся по наследству, что-то прячется от посторонних глаз, а кто-то умеет делать одно и то же, но по-разному. Всё это — объектно-ориентированное программирование (ООП), а точнее, его три кита: наследование, инкапсуляция и полиморфизм. Давайте разберёмся с этим не скучно, а весело!
1. Наследование: «Сын за отца»
Теория:
Наследование в ООП — это механизм, при котором один класс (ребёнок) получает свойства и методы другого класса (родителя). Это как передача семейного бизнеса, только без бюрократии и налоговой службы.
Пример:
class Parent:
    def __init__(self, surname):
        self.surname = surname
    
    def say_hello(self):
        print(f"Привет, я {self.surname}!")
# Дочерний класс наследует свойства и методы родителя
class Child(Parent):
    def play_games(self):
        print("Я играю в Minecraft вместо учёбы!")
son = Child("Иванов")
son.say_hello()  # Наследованный метод
son.play_games()  # Новый метод
Реальная жизнь:
- Наследование похоже на передачу фамилии и гена любви к прокрастинации от родителей к детям.
 - Иногда родительский код настолько старый, что «сын» (новый класс) не понимает, зачем ему вообще этот «багаж».
 
2. Инкапсуляция: «Секрет фирмы»
Теория:
Инкапсуляция — это скрытие деталей реализации и защита данных от вмешательства извне. Грубо говоря, это как пароль на Wi-Fi: внутри всё работает, но посторонние не должны туда лезть.
Пример:
class BankAccount:
    def __init__(self, balance):
        self.__balance = balance  # Две черты — значит, это приватная переменная
    
    def deposit(self, amount):
        self.__balance += amount
        print(f"Пополнено: {amount}. Баланс: {self.__balance}")
    
    def get_balance(self):
        return self.__balance
account = BankAccount(1000)
account.deposit(500)
print(account.get_balance())
# print(account.__balance)  # Ошибка! Доступ запрещён!
Реальная жизнь:
- Инкапсуляция — это когда у вас есть зарплата, но ваши родители не знают её точный размер.
 - Это когда ваш код защищён от «добрых» коллег, которые хотят «улучшить» его, а потом всё ломается.
 
3. Полиморфизм: «Один интерфейс — много реализаций»
Теория:
Полиморфизм — это возможность использовать один и тот же метод для разных объектов. Это как фраза «Я занят» у программистов: для одних это значит «я код пишу», для других — «смотрю мемы».
Пример:
class Animal:
    def speak(self):
        pass  # Заглушка
class Dog(Animal):
    def speak(self):
        print("Гав-гав!")
class Cat(Animal):
    def speak(self):
        print("Мяу!")
animals = [Dog(), Cat()]
for animal in animals:
    animal.speak()
Реальная жизнь:
- Полиморфизм — это когда один человек говорит «я работаю», но для менеджера это значит «пишет отчёт», а для программиста — «гуглит Stack Overflow».
 - Это как универсальный USB-провод: вроде один, а кучу разных устройств заряжает.
 
Заключение
Объектно-ориентированное программирование — это не просто сложные термины, а удобный способ организовать код.
- Наследование помогает не дублировать код (и передавать фамилии!).
 - Инкапсуляция защищает важные данные (как PIN-код от карты!).
 - Полиморфизм делает код гибким (как талант говорить «я занят» в разных ситуациях!).
 
Применяйте ООП с умом, и ваш код будет работать, как хорошая кофемашина — стабильно и без лишних вопросов!