指定作为子类型的类型

时间:2019-05-28 20:24:34

标签: python inheritance abstract-class extends typing

我们正在指定一个抽象类以及类似的实现:

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 :(得分:0)

注释Dict[str,Base]表示一个dict,它将str的键映射到Base(或其子类)的实例的值。您希望这些值本身就是类Base(或其子类之一),因此您需要改用Type[Base]。 (就像Base等人一样,是(元)类type的实例。)

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

但是,您的IDE是否足够聪明,可以判断constructors['type1']是否抽象。