【发布时间】:2018-09-29 04:49:19
【问题描述】:
我正在尝试创建一个小型服务定位器。所有服务都是 BaseService 类的子类。我使用 registerService 方法向其实例注册服务类类型,并将其存储在 _services 字典中。然后,您可以使用所需的类类型获取调用 getService 的服务实例。示例:
ServiceLocator.instance().registerService(LogService,LogService())
logServiceInstance =ServiceLocator.instance().getService(LogService)
这是显示错误的代码:
E = TypeVar('E', bound=BaseService)
class ServiceLocator(QObject): #type: ignore
_instance = None;
allServicesInited = pyqtSignal()
def __init__(self) -> None:
super().__init__()
self._instance = self
self._services: Dict[Type[E], E] = {} # This gives error: Invalid type "servicelocator.E"
def registerService(self, t: Type[E], instance: E)->None:
self._services[t]=instance
def getService(self,service: Type[E])-> E:
return self._services[service]
我收到错误:在添加 Dict 注释的行中输入无效类型“servicelocator.E”,正如我在代码中显示的那样。
我正在使用 Python 3.6.4 和 MyPy 0.590。 Mypy 标志是:
--ignore-missing-imports --strict
这不应该正确吗?
【问题讨论】:
标签: python subclass type-hinting mypy type-variables