Ответы на тестовые вопросы
| Вопрос | Ответ | Пояснение |
|---|---|---|
| 1.1 | c | Сначала wrapper печатает аргумент, затем возвращает результат square(4). |
| 1.2 | a | Без @functools.wraps декорированная функция получает имя и документацию wrapper. |
| 1.3 | Повторяет вызов при ошибке три раза | Цикл range(3) с try/except пытается выполнить функцию. |
| 1.4 | b | Сначала применяется нижний декоратор B, затем верхний A. |
| 1.5 | a, c | Фабрика возвращает декоратор, а декоратор должен вызывать исходную функцию. @wraps используется во внутреннем декораторе, не в фабрике. |
| 1.6 | Не запущена декорируемая функция | return func возвращает сам объект функции вместо результата её вызова. |
| 2.1 | b | Поле title получает значение "1984". |
| 2.2 | b | Поля сохраняются в объекте через self. |
| 2.3 | c | Атрибут — любая часть объекта, доступная через точку, включая поля и методы. |
| 2.4 | Нет self | Первым параметром __init__ должен быть self. |
| 2.5 | Нет создания объекта | book = Book присваивает класс, а не создаёт экземпляр. Нужно book = Book("...", "..."). |
| 2.6 | d | Объекты одного класса независимы и могут хранить разные значения полей. |
Решение практического задания: Circle
import math
class Circle:
def __init__(self, radius):
self.radius = radius
def get_area(self):
return math.pi * self.radius ** 2
circle = Circle(5)
print(f"Площадь: {circle.get_area():.1f}")
circle.radius = 8
print(f"Новая площадь: {circle.get_area():.1f}")
Логика: поле radius хранится в объекте через self. Метод get_area использует формулу π · r². После изменения поля повторный вызов метода возвращает новую площадь.
Примерный вывод:
Площадь: 78.5
Новая площадь: 201.1