uz
Feedback
Python: задачки и вопросы

Python: задачки и вопросы

Kanalga Telegram’da o‘tish

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media

Ko'proq ko'rsatish
7 128
Obunachilar
-124 soatlar
+77 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
Марк Лутц, «Изучаем Python», том 2, гл. 32: «class С: def act(self): print('spam') class E(С): def method(self): # self подразумевается в super proxy = super() # Эта форма не имеет смысла вне метода print(proxy) # Вывод обычно скрытого промежуточного объекта proxy.act() # Аргументы отсутствуют: неявно вызывает метод суперкласса print(E().method())» Пошагово: 1. E().method() создает экземпляр класса E и вызывает его метод method() 2. Внутри method(): - Создается proxy = super() (объект super) - Выводится print(proxy) → <super: <class 'E'>, <E object>> - Вызывается proxy.act() → выводится spam 3. Метод method() завершается без return, поэтому возвращает None

🪤 Что выведет код?
Anonymous voting

Из документации Python: «SystemError: Возникает, когда интерпретатор обнаруживает внутреннюю ошибку, но ситуация не выглядит настолько серьезной, чтобы заставить его потерять всякую надежду». «ModuleNotFoundError: Подкласс ImportError, который возникает при импорте, когда модуль не может быть найден». «StopIteration: Вызывается встроенной функцией next() и методом итератора __next__(), чтобы сигнализировать об отсутствии дальнейших созданных итератором элементов».

🧩 Какого типа исключения не существует?
Anonymous voting

Из документации Python: «@staticmethod Преобразует метод в статический. Такой метод не получает неявного первого аргумента: class C: @staticmethod def f(arg1, arg2, argN): ... Форма @staticmethod представляет собой декоратор функции. Статический метод может быть вызван как для класса (например, C.f()), так и для экземпляра (например, C().f())». Декораторы позволяют расширять и изменять поведение вызываемых объектов (функций, методов и классов) без постоянного изменения самого вызываемого объекта.

🧩
Anonymous voting

Задача выше тоже относится к теме слотов. Что происходит: 1. Класс C - пустой базовый класс 2. Класс D наследует от C и имеет __slots__ = ['a'] - это означает, что экземпляры класса D могут иметь только атрибут a 3. X = D() - создается экземпляр класса D 4. X.a = 1 - устанавливается атрибут a (разрешенный слот) 5. X.b = 2 - устанавливается атрибут b (НЕ разрешенный слот) Почему же в __dict__ только {'b': 2}? Когда вы используете, атрибуты, указанные в __slots__ (в данном случае a) хранятся в специальной структуре данных, а не в __dict__. Атрибуты, НЕ указанные в __slots__ (в данном случае b) хранятся в __dict__ как обычно.

🪤 Что выведет код?
Anonymous voting

Документация Python: «object.__slots__ ...__slots__ резервирует место для объявленных переменных и предотвращает автоматическое создания dict и weakref для каждого экземпляра». В задаче выше мы «зафиксировали» список атрибутов и не допускаем добавление ape. Средство слотов задумывалось как способ отлавливания опечаток.

🧩 Что выведет код?
Anonymous voting

Здесь речь также идет о принципе MRO (см. предыдущую задачу). x = D() # создаем экземпляр класса D, но НЕ вызываем никаких методов Метод meth() содержит print('C.meth'), но этот print() выполняется только при вызове метода.

🪤 Что выведет код?
Anonymous voting

Речь идет о так называемом ромбовидном наследовании и принципе MRO (Method Resolution Order). Марк Лутц, «Изучаем Python», том 2, гл. 32: «Путь поиска при наследовании в ромбовидных схемах выполняется больше в манере сначала в ширину ~ Python сначала ищет в любых суперклассах справа от только что просмотренного и только потом поднимается к общему суперклассу вверху. Другими словами, поиск проходит по уровням, прежде чем двигаться вверх. ... class A: attr = 1 # Обычный класс class B(A): pass # В и С ведут к А class С(A): attr = 2 class D(B, С): pass # Проверяет С перед А х = D() print(х.attr) # Ищет в х, D, В, С Атрибут x.attr обнаруживается в суперклассе А, потому что в классических классах поиск при наследовании поднимается настолько высоко, насколько может, прежде чем остановиться и начать движение вправо».

🪤 Что выведет код?
Anonymous voting

Достаточно ли сложных задач?
Anonymous voting