12.03 Метаклассы и аннотации
- Метаклассы — зачем (не) нужны)
Модуль types (в частности FunctionType)
Напишем метакласс, который ничего не меняет, но выводит все параметры__call__, __new__ и __init__
- Добавим туда вывод имён всех методов
Задача_1. Написать метакласс dump, который "обмазывает" все методы класса выводом имени метода и значений его параметров (*args, **kwargs)
- реализация может закладываться на то, что через параметры методов передаются значения типов str, int, float и bool (и никаких других типов)
- формат вывода: имя_метода, список_args, словарь_kwargs
- вывод должен осуществляться при каждом вызове метода
- Пример:
- →
__init__: (10,), {} add: (9,), {} 29 add: (9,), {'another': 10} 29
- Аннотации — зачем (не) нужны)
Написать простой аннотированный класс и посмотреть в нём аннотации
Задача_2. Написать метакласс check, который добавляет в создаваемый класс метод check_annotations(), возвращающий True, если типы всех аннотированных полей объекта существуют и соответствуют аннотации, и False в противном случае
- Пример:
- →
False False True True
- Пример:
Если успеем — потыкаем в mypy/mypyc