Комментарии 14
Три редко используемых возможности Python 3...
Вроде как классы и форматирование особенно изучаются в первые часы знакомства с Python.
Интересно было бы посмотреть на этого «сферического разработчика в вакууме» который не знаком с форматированием и классами. Какой же это «разработчик»? Ага, я не знаю как включить двигатели у самолета, но я уже «пилот», так что ли?
Не просто классы, а dataclasses.
Не просто форматирование, но f-strings, которые всего как пару версий назад завезли.
Но соглашусь, что новой информации в статье нет, так как уже были статьи с раскрытием этих "фишек" питона.
По запросу "dataclasses" нашлось 22 публикации, включая эту.
Насчёт fstrings стоит также добавить, что этот способ поддерживает опции форматирования как метод format
, а также работает быстрее этого метода и форматирования процентом (пример сравнения здесь).
И рядом с dataclass
я бы ещё упомянул про namedtuple
– функционал далеко не новый, но идейно схожий, тоже предоставляет лаконичный способ создания классов данных без написания однотипного кода конструктора и repr'a, и тоже используемый реже, чем стоило бы. Основное отличие от dataclass
– данные в namedtuple
неизменны после создания, зато имеется некоторый буст по скорости работы (т.к под капотом минималистичный кортеж, а не список/словарь) и используемой памяти (т.к имена полей не дублируются в кортежах, а хранятся только в классе). Есть ли что-то такое у dataclasses
? Предполагаю, что может быть такая же оптимизация по памяти на основе единого места хранения имён полей.
Кстати любопытно, что синтаксис применения у них разный – namedtuple
может создавать класс и являться родителем для твоего, а dataclass
это декоратор, вероятно из-за того, что второй работает с типами. Можно ещё было бы пройтись по кейсам, где лучше применять один или дрогой тип, но возможно это и так очевидно.
например вот тут по тестам особой разницы нет, а памяти требует больше, насколько я понимаю.
>>> print(f'len = {len("abc")}')
len = 3
dataclasses Можно использовать только как dto ?
Насчет dataclasses, для меня наиболее привлекательна упрощенная конструкция, без необходимости в __init__ и __repr__.
Три редко используемых возможности Python 3, о которых каждый должен знать