Укажите тип, который является подтипом - PullRequest
0 голосов
/ 28 мая 2019

Мы указываем абстрактный класс и его реализацию следующим образом:

from abc import ABC
class Base(ABC):
    ...

class Type1(Base):
    def __init__(self, var1: str):
        ...

, затем мы пытаемся использовать его таким образом

from typing import Dict
constructors: Dict[str, Base]= {'type1': Type1}

constructors['type1']("")  # Error here

Но мы получаем ошибкув нашей IDE, которая говорит, что Base не вызывается - это правда.Как указать, что значения нашего словаря являются потомками класса Base, которые являются вызываемыми?

1 Ответ

0 голосов
/ 28 мая 2019

Аннотация Dict[str,Base] указывает dict, который отображает str ключи на значения, которые являются экземплярами из Base (или его подклассами). Вы хотите, чтобы значения были самим классом Base (или одним из его подклассов), поэтому вместо него нужно использовать Type[Base]. (Также как Base и др. Являются экземплярами (мета) класса type.)

constructors: Dict[str, Type[Base]] = {'type1': Type1}
constructors['type1']("")

Является ли ваша IDE достаточно умной, скажите, является ли constructors['type1'] абстрактным или нет, это другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...