Как показано в исходном материале
Исходный код уже достаточно современен: используются f-strings, наследование, isinstance и hasattr.
Почему можно улучшить
- Добавить type hints для параметров и возвращаемых значений.
- Использовать
list[Receipt]вместо неявных списков. - Заменить проверки
type(x) == Classнаisinstance(x, Class).
Рекомендуемый современный вариант
def get_total(self, receipt_type: str | None = None) -> float:
if receipt_type is None:
return sum(r.amount for r in self.receipts)
cls = SaleReceipt if receipt_type == "sale" else ReturnReceipt
return sum(r.amount for r in self.receipts if isinstance(r, cls))
Когда старый подход ещё можно встретить
Явная проверка type(x) == Class встречается в коде, где нужно исключить наследников и проверить именно конкретный класс. Но в большинстве случаев предпочтительнее isinstance.