S — Single Responsibility Principle (Robert Martin): sinfin dəyişməsi üçün yalnız bir səbəb olmalıdır. "Səbəb" kodun parçası deyil, dəyişiklik tələb edən insan və ya qrupdur (aktor): mühasibatlıq, HR, DBA və s. SRP "sinif bir metod etsin" demək deyil: sinif bir aktora xidmət etməlidir.
Pozuntu: "tanrı sinfi"
Employee üç iş görür: maaşı hesablayır (mühasibatlıq), hesabat mətni qurur (HR), bazaya yazır (DBA). Mühasibatlıq əlavə iş saatlarının əmsalını dəyişəndə eyni sinfə toxunuruq: save və hesabat da risk altındadır.
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