Задать вопрос
@forlorn555

Источники по Type hinting для статических анализаторов Python кода?

Поделитесь хорошими источниками по тайп хинтингу питона, под mypy, например, КРОМЕ документации.
При всём уважении к доке, вот например
def my_func(a: str = 'Hello', b: bool = False, c: int = 1):
    return a, b, c
    
input_kwargs = {'b': True}
result = my_func(**input_kwargs)


Output
main.py:5: error: Argument 1 to "my_func" has incompatible type "**Dict[str, bool]"; expected "str"  [arg-type]
Found 1 error in 1 file (checked 1 source file)

И удачи прийти к решению через чтение документации по mypy(она крутая, но запутанных кейсов нет вообще). Естественно пример игрушечный, как и примеры в документации. Почти все решения сводятся к подстраиванию под муру. Например, аннотировать словарь как Params
class Params(TypedDict, total=False):
    a: str
    b: bool
    c: int


Так вот вопрос к бывалым, как быстро сплестись с муру?
UPD: Меня интересуют, книги, возможно труды седых дядек по-типу cheatsheets, любые источники информации на уровне документации. Вовсе не то как распаковать словарь так, чтобы не ругался муру. Вот пытаюсь получить ответы, отличные от "Выучи го, куда быстрее чем в муру разобраться", "В питоне нельзя в статику играть" . Надеюсь так понятнее
На данный момент знаю только 3 дельных источника: mypy issues, mypy docu, python typing.
  • Вопрос задан
  • 92 просмотра
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Some-one
Аааааа, мои глаза!
def my_func(a: str = 'Hello', b: bool = False, c: int = 1):
    return a, b, c
    
input_kwargs = {'b': True}
result = my_func(**input_kwargs)


Вот, тут нет ошибки:
def my_func(a: str = 'Hello', b: bool = False, c: int = 1):
    return a, b, c

input_kwargs = {'a': "Some String", 'b': True, 'c': 8342}
result = my_func(input_kwargs['a'],input_kwargs['b'],input_kwargs['c'])


Короче, тут ошибка заключается в том, что он передает в функцию(где 3 аргумента) 1 аргумент, и то bool а не str
Если известен только 1 аргумент, то так:
def my_func(a: str = 'Hello', b: bool = False, c: int = 1):
    return a, b, c
    
input_kwargs = {'b': True}
result = my_func(b=input_kwargs['b'])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы