Декораторы · 14 из 14
Декоратор класса
Задействованы также: ООП
Зинаида Петровна хочет знать, чем вообще занимается программа отделения: какие операции зовут сто раз в день, а какие — ни разу. Вешать счётчик на каждый метод руками — двадцать строчек и гарантированно забытый метод.
Что сделать
Посчитайте, какие операции программа отделения зовёт и сколько раз, — одним декоратором на весь класс.
Что приходит
klass— класс, к которому приписать счётчики
Что вернуть
Тот же класс со словарём obrashcheniya «метод → сколько раз вызван» по всем методам без подчёркивания в начале, сначала нули; счёт общий для всех экземпляров.
Допишите функцию schitat_obrashcheniya в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
У класса Okno методы prinyat и vydat. Первое окно приняло, второе приняло и выдало: Okno.obrashcheniya — {"prinyat": 2, "vydat": 1}. __init__ не считается.
Функция принимает класс, приписывает ему счётчики и возвращает тот же класс.
Поле класса «obrashcheniya» — словарь «имя метода → сколько раз вызван». В нём заранее перечислены все методы класса, у которых имя не начинается с подчёркивания, каждый с нулём, в порядке объявления. Методы с подчёркивания (включая «init») не считаются и не оборачиваются. Счёт общий для класса: вызов метода у любого экземпляра увеличивает тот же счётчик. Имена методов сохраняются.
Образцовый тест целиком
@schitat_obrashcheniya
class Okno:
def __init__(self, nomer):
self.nomer = nomer
def prinyat(self, ves):
return f"принято {ves} г"
def vydat(self, komu):
return f"выдано {komu}"
pervoe = Okno(1)
vtoroe = Okno(2)
pervoe.prinyat(100)
vtoroe.prinyat(200)
vtoroe.vydat("Марине")
Okno.obrashcheniya
{'prinyat': 2, 'vydat': 1}
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.