Написать параметрический декоратор TypeCheck(последовательность_типов, тип_результата), который бросает исключение TypeError при вызове функции со следующим сообщением:
"Type of argument Номер is not Тип", если не совпадает тип позиционного параметра функции и соответствующий ему по порядку тип в последовательности_типов
"Type of argument 'Имя' is not Тип", если не совпадает тип именного параметра функции и соответствующий ему тип в последовательности_типов.
Типы именованных параметров перечислены в конце последовательности_типов
- Типы именованных параметров проверяются в порядке их появления при вызове функции
"Type of result is not Тип", если тип возвращённого функцией значения не совпадает с типом_результата
"Function функция must have число arguments" — если количество переданных функции параметров (включая переданные по умолчанию) не соответствует длине последовательности_типов
- Сначала проверяются параметры в порядке описания в функции, затем вызывается функция, после чего проеряется результат. Ислкючение возникает при первом несовпадении типа.
18 Type of argument 2 is not <class 'str'>
Еще примеры:
- →
1 >>> valid(3, "--", 10)
2 18
3 >>> valid(3, 7, 10)
4 …
5 TypeError: Type of argument 2 is not <class 'str'>
6 >>> valid(3, "--", "*")
7 …
8 TypeError: Type of argument 3 is not <class 'int'>
9 >>> valid(3, "--", c=1.23)
10 …
11 TypeError: Type of argument 'c' is not <class 'int'>
12 >>> semivalid(2, 2)
13 4
14 >>> semivalid(1, 2)
15 …
16 TypeError: Type of result is not <class 'int'>
17 >>> variable(1,2,3,4)
18 4
19 >>> variable(1,2,a=100, b=500)
20 4
21 >>> variable(1,2,a=100)
22 …
23 TypeError: Function variable must have 4 arguments
24