TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7584 3.53K
🤝 3 признака дружелюбного класса

Чтобы класс не вызывал раздражения при использовании, он должен обладать тремя качествами:

1️⃣ Понятные аргументы: конструктор (`__init__`) принимает только то, что действительно нужно для создания объекта.
2️⃣ Красивое строковое представление: реализация метода __repr__. Вместо <Point object at 0x...> вы должны видеть Point(x=1, y=2, z=3). Это критично для логирования и отладки.
3️⃣ Логичное сравнение: реализация __eq__. По умолчанию Python сравнивает объекты по адресу в памяти. В дружелюбном классе два объекта с одинаковыми данными должны быть равны (`p1 == p2`).

⚡️ Dataclasses: дружелюбность «из коробки»

В современных версиях Python (3.7+) лучший способ создать дружелюбный класс — использовать декоратор @dataclass. Он автоматически генерирует методы __init__, __repr__ и __eq__ за вас.


from dataclasses import dataclass

@dataclass
class Point:
x: float
y: float
z: float


Результат: вы написали 5 строк кода, но получили функционал, на который вручную ушло бы 15. Это экономит время и страхует от опечаток.

🛠 Когда можно быть «недружелюбным»?

➡️ Сравнение: Не нужно добавлять __eq__ для объектов, у которых нет состояния (например, соединение с БД или логгер). Там важна идентичность объекта, а не равенство данных.
➡️ Строковое представление: Если у объекта нет значимых данных для показа (например, итератор enumerate`), стандартный `__repr__ вполне уместен.

Если класс должен уметь что-то специфическое, используйте другие магические методы (dunder methods):
➡️ __iter__: позволит распаковывать объект как кортеж (`x, y, z = point`).
➡️ __add__ / __sub__: если вы хотите складывать или вычитать объекты (например, векторы).

Главный совет: Используйте dataclasses как мерило. Если ваш обычный класс менее удобен, чем аналогичный @dataclass, значит, его пора «подружить» с пользователем.

📍 Навигация: Вакансии • Задачи • Собесы

Библиотека питониста

#буст
  • 👍 4
  • ❤ 1
  • 🤩 1
More from @pyproglib
  1. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  2. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  3. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  4. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  5. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
  6. Sep 14, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →