Как набрать общий вызов в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как набрать общий вызов в Python

Сообщение Anonymous »

Я пытаюсь сделать что-то вроде этого: < /p>

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

from collections.abc import Callable, Coroutine
from typing import Any, Generic, TypeVar

CRT = TypeVar("CRT", bound=Any)

class Command(Generic[CRT]): pass

CommandHandler = Callable[[Command[CRT]], Coroutine[Any, Any, CRT]]

class MyCommand(Command[int]): pass

async def my_command_handler(command: MyCommand) -> int:
return 42

async def process_command(command: Command[CRT], handler: CommandHandler[CRT]) -> CRT:
return await handler(command)

async def main() -> None:
my_command = MyCommand()

await process_command(my_command, my_command_handler)
Но я получаю следующую ошибку Mypy на моем await process_command (my_command, my_command_handler) line

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

Argument 2 to "process_command" has incompatible type "Callable[[MyCommand], Coroutine[Any, Any, int]]"; expected "Callable[[Command[int]], Coroutine[Any, Any, int]]"Mypyarg-type
(function) def my_command_handler(command: MyCommand) -> CoroutineType[Any, Any, int]
, которого я не понимаю, потому что mycommand команда [int] .
Как мне сделать Mypy счастливым? Класс и убедитесь, что обработчик принимает экземпляр команды в качестве параметра и возвращает правильный результат, определенный командой.

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

async def my_command_handler(command: Command[int]) -> int:
if not isinstance(command, MyCommand):
raise TypeError("Expected MyCommand")
return 42
Type Type Проверяет нормально, но я не фанат необходимости выполнять проверку дополнительного типа в функции, чтобы получить правильное печатание внутри функции.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как набрать общий вызов в Python
    Anonymous » » в форуме Python
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • Как набрать общий вызов в Python
    Anonymous » » в форуме Python
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • Как набрать общий вызов в Python
    Anonymous » » в форуме Python
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • Как набрать общий вызов в Python
    Anonymous » » в форуме Python
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • Android Могу ли я постоянно вводить данные в общий объект во время выполнения, другими словами, один раз изменить общий
    Anonymous » » в форуме Android
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous

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