指定作为子类型的类型

Specify type that is a subtype

我们正在指定一个抽象 class 以及这样的实现:

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 class 的后代,其中 可调用的?

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

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

你的 IDE 是否足够聪明,判断 constructors['type1'] 是否抽象是另一回事。