我们正在指定一个抽象类以及类似的实现:
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
类的后代,它们是 可调用的?
答案 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']
是否抽象。