S — Single Responsibility Principle (Роберт Мартин): у класса должна быть только одна причина для изменения. «Причина» — не кусок кода, а человек или группа, требующие изменения (актор): бухгалтерия, HR, DBA и т. д. SRP не значит «один метод на класс»: класс должен обслуживать одного актора.

Слева три актора связаны с одним классом, справа у каждого свой
Слева три актора связаны с одним классом, справа у каждого свой

Нарушение: «божественный класс»

Employee делает три дела: считает зарплату (бухгалтерия), строит текст отчёта (HR), пишет в базу (DBA). Когда бухгалтерия меняет коэффициент сверхурочных, мы правим тот же класс, и save с отчётом оказываются под угрозой.

python
class Employee:
    def __init__(self, name, rate, hours):
        self.name, self.rate, self.hours = name, rate, hours

    def calculate_pay(self):               # changed by Accounting
        overtime = max(0, self.hours - 160)
        return (self.hours - overtime) * self.rate + overtime * self.rate * 1.5

    def hours_report(self):                # changed by HR
        return f"{self.name}: {self.hours} h"

    def save(self, db):                    # changed by the DBA
        db[self.name] = self.hours