Как правильно сделать аннотацию *args, **kwargs и self

Как правильно сделать аннотацию аргументов *args, **kwargs и self?

И надо ли делать их вообще, или всем и так понятно?


Ответы (1 шт):

Автор решения: insolor

Для self аннотация не нужна (и так очевидно, что тип self - это класс, в котором объявлен метод).

Для *args и **kwargs указывайте тип передаваемых значений, пример:

from typing import List, Mapping


def function(*args: int, **kwargs: int):
    pass


function(1, 2, '3', a=1, b='asdasd')

При проверке с помощью mypy покажет ошибки несоответствия типов на аргументах, через которые передана строка вместо целого числа:

anno.py:8: error: Argument 3 to "function" has incompatible type "str"; expected "int"
anno.py:8: error: Argument "b" to "function" has incompatible type "str"; expected "int"
Found 2 errors in 1 file (checked 1 source file)

Документация: PEP 484, раздел "Arbitrary argument lists and default argument values"

→ Ссылка