Как исправить mypy, чтобы разрешить вывод типов из словаря с интерфейсамиPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Как исправить mypy, чтобы разрешить вывод типов из словаря с интерфейсами

Сообщение Гость »

Итак, у нас есть действительно простой инжектор, который как раз соответствует нашим потребностям. Теперь мы хотим иметь вывод типа, но нам очень сложно заставить его работать с mypy. Вот мини-пример, воспроизводящий проблему:

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

from abc import ABC, abstractmethod
from typing import Type, TypeVar, Dict

class Interface(ABC):
@abstractmethod
def method(self):
pass

class Implementation(Interface):
pass

T = TypeVar("T", covariant=True)
def get_implementation(interface: Type[T], *args, **kwargs) -> T:
dictionary: Dict[Type[T], T] = {Interface: Implementation}
return dictionary[interface](*args, **kwargs)

implementation = get_implementation(Interface)
Вы можете запустить этот код на https://mypy-play.net/?mypy=0.971&python=3.6. Вы получите следующую ошибку:

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

main.py:15: error: Dict entry 0 has incompatible type "Type[Interface]": "Type[Implementation]"; expected "Type[T]": "T"
main.py:16: error: "object" not callable
main.py:19: error: Only concrete class can be given where "Type[Interface]" is expected
Честно говоря, я понятия не имею, как их исправить. Мне код кажется правильным, но mypy явно не думает так же. Есть идеи, как сделать такой тип инъекции безопасным?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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