Телеграм

python_practics

@python_practics Программирование и разработка
РКН: проверяем Иноагент: проверяем
Python - обучающие материалы, полезные советы и статьи.

Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront

Купить рекламу: https://telega.in/c/python_practics

Статистика обновлена 12.11.2026 в 22:18 · 1 просмотр страницы · Хотите больше просмотров?

Подписчики5 105
Охват поста450 9% от подписчиков
ERR за месяц8,81%
ERR за 24 часа4,31%

Динамика за 30 дней

Рекламные публикации

Рекламных публикаций не найденоЗа последнее время мы не нашли на площадке ни одного рекламного поста.

Последние публикации

Все посты канала →
python_practics tg5.1 тыс. подписчиков
Открыть пост ↗
✨ len(order) вместо order.get_cart_len()

Встроенные функции и операторы Python на деле вызывают специальные методы объекта. len(obj) означает obj.__len__(), а a + b превращается в a.__add__(b).

Поэтому своему классу не нужен метод вроде get_cart_len(). Достаточно определить __len__:

>>> class Order:
... def __init__(self, cart, customer):
... self.cart = list(cart)
... self.customer = customer
...
... def __len__(self):
... return len(self.cart)
...
>>> order = Order(["banana", "apple", "mango"], "Real Python")
>>> len(order)
3


Без __len__ такой вызов упадёт с TypeError. И есть подвох: метод обязан вернуть целое число. Вернёте float, получите тот же TypeError.

Так же класс можно научить работать с +, [] и bool() и даже стоять справа в выражении 6 + obj.

👍 - если было полезно

@python_practics
👁 171 ↻ 4 сегодня в 10:14
python_practics tg5.1 тыс. подписчиков
Открыть пост ↗
✨ Добавили скидку для гильдии, а ученики стали платить больше

В учебном примере на Python класс PotionPricing считает цену зелья для учеников: минус 10% от базовой цены вместе с наценкой. За зелье £100 + £20 выходит £108.

Через пару месяцев другой программист дописал в тот же метод скидку гильдии (5% только от базовой цены) и обобщил расчёт. Гильдия получила верные £115, а ученики внезапно £110.

От такого защищает принцип открытости/закрытости (OCP, буква O в SOLID): код открыт для расширения, но закрыт для изменения. Каждое правило живёт в своём классе с методом .price(), а функция quote() просто вызывает его у переданного объекта. Общий родитель не нужен, хватает duck typing.

Новый тариф теперь означает новый класс, а рабочий расчёт для учеников никто не трогает.

Есть оговорка: если новых тарифов не предвидится, отдельные классы могут стоить дороже в понимании, чем сэкономят.

В оригинале весь путь от поломки до починки показан на коде шаг за шагом.

👍 - если было полезно

@python_practics
👁 220 ↻ 3 вчера в 10:02
python_practics tg5.1 тыс. подписчиков
Открыть пост ↗
✅ Если ИИ-агент написал и код, и тесты, зелёный прогон значит одно: агент согласен сам с собой

Тесты, написанные после кода, описывают этот код вместе с багами. Поэтому туториал Real Python предлагает делить роли в TDD иначе.

Вы фиксируете контракт: что принимает класс, что возвращает, когда бросает ошибку. Первый тест пишете сами. Агент дописывает остальные, пока реализации ещё нет. Вы их проверяете, и только потом агент пишет код.

Проверять стоит всерьёз. Для класса Version, который сравнивает строки версий, агент написал тест 1.2 < 1.2.1. Он похож на проверку правила «недостающие сегменты равны нулю», но проходит и без него.

Пока агент пишет код, запись в tests/ закрывают правилом доступа в Claude Code. Оговорка: правило останавливает инструменты агента, но не запущенные им скрипты.

Остальные ловушки цикла разобраны на том же примере.

👍 - если было полезно

@python_practics
👁 273 ↻ 2 10 ноября