📝 Практические задания

⚡ Задания в двух словах

  1. Тестовые вопросы по декораторам (1.1–1.6).
  2. Тестовые вопросы по ООП (2.1–2.6).
  3. Практическое задание: создать класс Circle.

Вопросы по декораторам

Вопрос 1.1. Что произойдёт при выполнении кода?

def decorator(func):
    def wrapper(x):
        print("Аргумент:", x)
        return func(x)
    return wrapper


@decorator
def square(n):
    return n * n


print(square(4))
  1. Выводится только результат "16".
  2. Выводится результат "16" и "Аргумент: 4".
  3. Выводится "Аргумент: 4" и результат "16".
  4. Выводится только "Аргумент: 4".

Вопрос 1.2. Что выведет код?

def decorator(func):
    def wrapper():
        func()
    return wrapper


@decorator
def function():
    """Исходная функция"""
    pass


print(function.__name__)
print(function.__doc__)
  1. 'wrapper', None
  2. 'wrapper', 'Исходная функция'
  3. 'function', None
  4. 'function', 'Исходная функция'

Вопрос 1.3. Что делает следующий декоратор?

def retry(func):
    def wrapper():
        for _ in range(3):
            try:
                return func()
            except Exception:
                continue
    return wrapper

Ответьте словами.

Вопрос 1.4. Какой порядок применения декораторов?

@A
@B
def f():
    pass
  1. Сначала применяется A, потом B.
  2. Сначала применяется B, потом A.

Вопрос 1.5. Что верно о декораторе с аргументами?

  1. Возвращает другую функцию-декоратор.
  2. Использует @wraps внутри первой функции.
  3. Должен вызывать декорируемую функцию внутри.
  4. Работает только с функциями без параметров.

Вопрос 1.6. Укажите ошибку в этом декораторе:

def decorator(func):
    def wrapper(*args, **kwargs):
        print("Ошибка")
        return func
    return wrapper

Вопросы по ООП

Вопрос 2.1. Что будет выведено?

class Book:
    def __init__(self, book_name):
        self.title = book_name


book = Book("1984")
print(book.title)
  1. book_name
  2. 1984
  3. title
  4. Ошибка

Вопрос 2.2. Укажите, что подходит под определение «поле объекта»:

  1. Значение, сохранённое в классе.
  2. Значение, сохранённое в объекте через self.
  3. Имя класса.
  4. Аргумент конструктора, не сохранённый в объекте.

Вопрос 2.3. Что можно отнести к атрибутам объекта?

  1. Только поля.
  2. Только методы.
  3. Поля и методы.

Вопрос 2.4. Найдите ошибку в коде:

class Person:
    def __init__(name, age):
        self.name = name
        self.age = age

Вопрос 2.5. Найдите ошибку в коде:

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author


book = Book
print(book.title)

Вопрос 2.6. Какое утверждение является верным?

  1. Метод __init__ вызывается вручную при создании объекта.
  2. Все объекты класса обязательно имеют одинаковые значения полей.
  3. Поля объекта доступны только внутри __init__.
  4. Объекты одного класса могут хранить разные значения полей.

Практическое задание

Задание. Создайте класс Circle, описывающий окружность.

  • У каждого объекта должно быть поле radius.
  • Добавьте метод get_area() для вычисления площади.
  • Создайте окружность и выведите её площадь.
  • Измените радиус и снова выведите площадь.

Пример вывода:

Площадь: 78.5
Новая площадь: 201.0

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Как лучше использовать summary-урок?

Вопрос 2

Что показывает хороший результат после повторения блока?

Вопрос 3

Какой вопрос стоит задать себе после каждого ответа?

Вопрос 4

Какой стиль имён переменных обычно рекомендует PEP 8?

Вопрос 5

Зачем использовать f-strings в современном Python?

Вопрос 6

Когда полезен ранний возврат из функции?

Вопрос 7

Что делает аннотация типа в Python?

Вопрос 8

Как лучше обрабатывать ожидаемую ошибку преобразования?