Неточное название класса
Анти-паттерн
Название не должно обманывать. Важно называть класс точно, чтобы при беглом взгляде на одно только название было понятно, за что он отвечает.
Пример 1¶
Плохо:
class Service:
def __init__(self, payment_payload):
self.payment_payload = payment_payload
def process_payment(self):
...
Хорошо:
class PaymentService:
def __init__(self, payment_payload):
self.payment_payload = payment_payload
def process_payment(self):
...
Пример 2¶
Плохо:
class Converter:
def __init__(self, exchange_rate):
self.exchange_rate = exchange_rate
def convert_amount(self, amount):
return amount * self.exchange_rate
Хорошо:
class CurrencyConverter:
def __init__(self, exchange_rate):
self.exchange_rate = exchange_rate
def convert_amount(self, amount):
return amount * self.exchange_rate
Пример 3¶
Плохо:
class Person:
def __init__(self, name, salary, bonus_percentage, is_good_employee):
self.name = name
self.salary = salary
self.bonus_percentage = bonus_percentage
self.is_good_employee = is_good_employee
self.bonus = 0
def calculate_full_salary(self):
self.bonus = self.calculate_bonus()
return self.salary + self.bonus
def calculate_bonus(self):
if self.is_good_employee:
return self.salary * (self.bonus_percentage / 100)
return 0
Хорошо:
class Employee:
def __init__(self, name, salary, bonus_percentage, is_good_employee):
self.name = name
self.salary = salary
self.bonus_percentage = bonus_percentage
self.is_good_employee = is_good_employee
self.bonus = 0
def calculate_full_salary(self):
self.bonus = self.calculate_bonus()
return self.salary + self.bonus
def calculate_bonus(self):
if self.is_good_employee:
return self.salary * (self.bonus_percentage / 100)
return 0