После ~5 лет обсуждений в Python добавляют простую, но очень полезную вещь — sentinel-значения.
Иногда важно отличать:
— аргумент вообще не передали
— передали
None— передали конкретное значение
Раньше это делали через костыли (типа `object()`), теперь — нативно.
👉 Пример:
MISSING = sentinel("MISSING")
class Logger:
def __init__(self, level: MISSING | None | str = MISSING):
if level is MISSING:
self.level = get_global_default_level()
elif level is None:
self.level = None # отключить логирование
else:
self.level = level
Что это даёт:
— можно чётко понять: аргумент не передан или передан
None— чище API
— меньше неочевидных багов
По сути, теперь у функции есть 3 состояния:
1. не передали → взять дефолт
2. передали
None → особая логика3. передали значение → использовать его
⚡️ Это мелкое изменение, но оно сильно упрощает дизайн функций и библиотек.
Использовали ли вы подобные паттерны раньше или обходились
None?📍 Навигация: Вакансии • Задачи • Собесы
Библиотека питониста
#буст