Название не должно обманывать. Важно называть класс точно, чтобы при беглом взгляде на одно только название было понятно, за что он отвечает.


Пример 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