Протокол сопоставления функции подсказки типа Python с kwargsPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Протокол сопоставления функции подсказки типа Python с kwargs

Сообщение Anonymous »

У меня возникли проблемы с подсказкой типа Python PyCharm при определении функции, соответствующей протоколу. Он предупреждает меня, и я не знаю почему.

Код: Выделить всё

from typing import Protocol, List, Any

class MyProtocol(Protocol):
def __call__(self, docs: List[str], **kwargs: Any) -> str:
pass

def do_call(
mylist: List[str],
callback: MyProtocol,
**kwargs: Any,
) -> str:
return callback(mylist, **kwargs)

def my_func(mylist: List[str], **kwargs: Any) -> str:
return ",".join(mylist)

# this results in a warning
do_call(["a", "b", "c"], my_func)
Проверка типов выдает следующее предупреждение:

Ожидаемый тип «MyProtocol», получено «(mylist: list[ str], kwargs: dict[str, Any]) -> вместо str'

Даже пример в документации Python приводит к предупреждению в строке это должно быть нормально.

Код: Выделить всё

from collections.abc import Iterable
from typing import Protocol

class Combiner(Protocol):
def __call__(self, *vals: bytes, maxlen: int | None = None) -> list[bytes]: ...

def batch_proc(data: Iterable[bytes], cb_results: Combiner) -> bytes:
for item in data:
...

def good_cb(*vals: bytes, maxlen: int | None = None) -> list[bytes]:
...
def bad_cb(*vals: bytes, maxitems: int | None) -> list[bytes]:
...

batch_proc([], good_cb)  # OK
batch_proc([], bad_cb)   # Error! Argument 2 has incompatible type because of
# different name and kind in the callback
Для строки ОК:

Ожидаемый тип «Объединитель», получено «(vals: tuple[bytes, . ..], maxlen: int | None) -> list[bytes]' вместо этого

Есть ли способ сообщить подсказчику типа, что моя функция действительно «MyProtocol»? Правильна ли моя реализация или это может быть дефект встроенного подсказчика типов PyCharm?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ith-kwargs
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Тип подсказки с Kwargs: Pylance ReportargumentType, поднятый на входе в словарь
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Протокол MODBUSTCP в протокол Ethernetip C#
    Anonymous » » в форуме C#
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • Какой подсказки для подсказки типа?
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как назначить подсказку типа из подсказки типа возвращаемого значения функции
    Anonymous » » в форуме Python
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Типизация Python: копирование `**kwargs` из одной функции в другую
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»