Написать метакласс init, который рассчитывает на то, что методы создаваемого им класса полностью аннотированы. Для каждого позиционного параметра обычного метода в этом классе предусматривается значение по умолчанию (если оно не было задано) на основании типа в аннотации.
Если в аннотации тип параметра простой, значение по умолчанию — это тип_пареметра()
Если в аннотации тип параметра составной (тип_контейнера[ещё типы], например, list[int]), значение по умолчанию — это тип_контейнера()
Будем считать что тип самой аннотации при этом всегда types.GenericAlias
Если объект соответствующего типа нельзя создать конструктором без операндов, значение по умолчанию — None
Практически спойлер: __defaults__
0/None/[]/defined 1/range(0, 3)/[]/defined 0/range(4, 7)/[]/defined 0/None/[1, 2, 3]/3
Спойлер: