В чем заключается принцип единственной ответственности (SRP) в ООП?

«В чем заключается принцип единственной ответственности (SRP) в ООП?» — вопрос из категории ООП, который задают на 23% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принцип единственной ответственности (Single Responsibility Principle, SRP) — это один из пяти принципов SOLID, который гласит, что каждый класс должен иметь только одну причину для изменения.

Это означает, что класс должен быть ответственен только за одну, четко определенную часть функциональности. Следование этому принципу делает код более модульным, понятным, легко тестируемым и менее хрупким при внесении изменений.

Нарушение принципа

Класс User отвечает и за хранение данных, и за их сохранение в базу данных. Причины для изменения: изменилась структура пользователя или способ сохранения.

# Плохая практика: класс имеет несколько ответственностей
class User:
    def __init__(self, name: str, email: str):
        self.name = name
        self.email = email

    def save_to_db(self):
        # Логика сохранения пользователя в базу данных
        print(f"Saving {self.name} to DB")

Соблюдение принципа

Ответственность разделена: User хранит данные, а UserRepository управляет их сохранением.

# Хорошая практика: каждая сущность отвечает за свое
class User:
    def __init__(self, name: str, email: str):
        self.name = name
        self.email = email

class UserRepository:
    def save(self, user: User):
        # Логика сохранения пользователя в базу данных
        print(f"Saving {user.name} to DB")

Теперь, если изменится способ сохранения, правки нужно будет вносить только в UserRepository, не затрагивая класс User.