🪤 Что выведет код?
Anonymous Quiz
23%
Случайное число между между 1 и 6, включая 1 и 6
13%
Случайное число между между 1 и 6, исключая 1 и 6
59%
4
5%
Error
👍2👎2
«Несмотря на успешную генерацию случайного числа, функция всегда возвращает 𝟺 из−за 𝚛𝚎𝚝𝚞𝚛𝚗 в 𝚏𝚒𝚗𝚊𝚕𝚕𝚢−блоке, что делает 𝚝𝚛𝚢−блок фактически бесполезным.
𝙿𝙴𝙿 𝟽𝟼𝟻 ввёл 𝚂𝚢𝚗𝚝𝚊𝚡𝚆𝚊𝚛𝚗𝚒𝚗𝚐 на этот случай, объясняя, почему конструкции вроде 𝚛𝚎𝚝𝚞𝚛𝚗 / 𝚋𝚛𝚎𝚊𝚔 / 𝚌𝚘𝚗𝚝𝚒𝚗𝚞𝚎 в 𝚏𝚒𝚗𝚊𝚕𝚕𝚢 могут быть ошибкой — они затмевают поведение основного блока 𝚝𝚛𝚢, сбивая с толку разработчиков.
Способы решения проблемы
Перенести 𝚛𝚎𝚝𝚞𝚛𝚗 в блок 𝚎𝚡𝚌𝚎𝚙𝚝:
𝚍𝚎𝚏 𝚍𝟼() −> 𝚒𝚗𝚝:
𝚝𝚛𝚢:
𝚛𝚎𝚝𝚞𝚛𝚗 𝚛𝚊𝚗𝚍𝚘𝚖.𝚛𝚊𝚗𝚍𝚒𝚗𝚝(𝟷, 𝟼)
𝚎𝚡𝚌𝚎𝚙𝚝 𝙴𝚡𝚌𝚎𝚙𝚝𝚒𝚘𝚗:
# Фолбэк — здесь уместнее
𝚛𝚎𝚝𝚞𝚛𝚗 𝟺
Избавиться от 𝚝𝚛𝚢 / 𝚎𝚡𝚌𝚎𝚙𝚝, если исключения маловероятны:
𝚍𝚎𝚏 𝚍𝟼() −> 𝚒𝚗𝚝:
𝚛𝚎𝚝𝚞𝚛𝚗 𝚛𝚊𝚗𝚍𝚘𝚖.𝚛𝚊𝚗𝚍𝚒𝚗𝚝(𝟷, 𝟼)
Рекомендации автора и сообщества
Please open Telegram to view this post
VIEW IN TELEGRAM
Альфа-Банк приглашает IT-специалистов на турнир по спортивному хакингу AlfaCTF — он пройдёт 13-14 сентября
Разработчики, тестировщики и аналитики будут решать таски: взламывать, находить уязвимости, собирать флаги и бороться за звание лучшего хакера.
🤓 🤓 🤓 🤓 🤓 🤓 🤓 🤓
🤓 🤓 🤓 🤓 🤓 🤓 🤓 🤓
🤓 🤓 🤓 🤓 🤓 🤓 🤓 🤓
🤓 🤓 🤓 🤓 🤓 🤓 🤓 🤓
🤓 🤓 🤓 🤓 🤓 🤓 🤓 🤓
🤓 🤓 🤓 🤓 🤓 🤓 🤓 🤓
🤓 🤓 🤓 🤓 🤓 🤓 🤓 🤓
Всего три уровня сложности, есть и простой для студентов. Команды-победители получат до 450 тысяч рублей. Собрать команду и зарегаться нужно на сайте. Для разминки найдите баг на картинке:
Это #партнёрский пост
Разработчики, тестировщики и аналитики будут решать таски: взламывать, находить уязвимости, собирать флаги и бороться за звание лучшего хакера.
Всего три уровня сложности, есть и простой для студентов. Команды-победители получат до 450 тысяч рублей. Собрать команду и зарегаться нужно на сайте. Для разминки найдите баг на картинке:
Это #партнёрский пост
Please open Telegram to view this post
VIEW IN TELEGRAM
«Из−за того, что декораторы классов способны перехватывать вызовы, создающие экземпляры, они могут использоваться либо для управления созданием экземпляров классов, либо для реализации паттерна проектирования «одиночка». В последнем случае декоратор обеспечивает, чтобы экземпляр класса существовал в единственном числе, и при последующих вызовах возвращался именно он.»
Декоратор 𝚂𝚒𝚗𝚐𝚕𝚎𝚝𝚘𝚗 работает следующим образом:
− В словаре 𝚒𝚗𝚜𝚝𝚊𝚗𝚌𝚎𝚜 хранятся созданные экземпляры для каждого класса;
− При первом вызове 𝙿𝚎𝚛𝚜𝚘𝚗('𝙱𝚘𝚋') создается экземпляр и сохраняется в словаре;
− При втором вызове 𝙿𝚎𝚛𝚜𝚘𝚗('𝚂𝚞𝚎') декоратор проверяет, что экземпляр уже существует, и возвращает тот же объект;
− Поэтому и 𝚋𝚘𝚋, и 𝚜𝚞𝚎 ссылаются на один и тот же объект с именем '𝙱𝚘𝚋'.
Таким образом, при выводе 𝚋𝚘𝚋.𝚗𝚊𝚖𝚎 и 𝚜𝚞𝚎.𝚗𝚊𝚖𝚎 мы получаем '𝙱𝚘𝚋' дважды, поскольку это один и тот же объект.