Класс или не класс? Проектируем модели
Не каждая задача требует класса — а неправильный выбор виден не сразу, а только когда код становится сложнее читать.
Не каждая задача требует класса
После 24 разделов про классы легко решить, что классом нужно оборачивать вообще всё. Это не так — класс полезен, когда есть И состояние, И поведение, которые имеет смысл держать вместе, и когда объектов этого вида будет несколько, с независимой историей.
class SredneeArifmeticheskoe:
def __init__(self, chisla):
self.chisla = chisla
def vychislit(self):
return sum(self.chisla) / len(self.chisla)
rezultat = SredneeArifmeticheskoe([4, 8, 15]).vychislit()
# Код работает правильно — ошибка не во время выполнения,
# а в самом ДИЗАЙНЕ: слишком много церемоний для одного вычисления
Формально это рабочий код, но здесь нет ни настоящего состояния (объект создаётся и сразу используется один раз), ни нескольких экземпляров — просто вычисление, притворяющееся классом. Обычная функция читается и тестируется проще: srednee(chisla). Класс оправдан, когда объект живёт какое-то время И меняет состояние — как Player из раздела 14.9, а не когда он существует одну строчку.
def srednee_arifmeticheskoe(chisla):
return sum(chisla) / len(chisla)
rezultat = srednee_arifmeticheskoe([4, 8, 15])
Для каждого сценария решите, что уместнее — функция или класс, и обоснуйте: (1) перевод температуры из Цельсия в Фаренгейт; (2) банковский счёт с балансом и историей операций; (3) проверка, является ли число простым.