两个具有循环依赖关系的相互依赖 类 的类型提示

Type-hints for two interdependent classes with circular dependencies

我知道通常不鼓励循环依赖——但是,在 C# 和 TypeScript 中,我有时发现它们很有用。可能是我对 python 缺乏经验,也可能是我想错了方法或缺少 google 的正确用词。我将如何解决以下问题?

我正在尝试创建一个 class 来处理请求,并且每个处理事件都伴随着一个上下文。所以,我想创建处理程序 class 和上下文 class - 但它们是相关的,linter 在第 2 行给我问题,说 HandlerService 未定义。

示例(虚拟):

class HandlerContext:
    def __init__(self, service : HandlerService, uuid : str):
        self.service = service
        self.uuid = uuid

class HandlerService:
    def handle_request(self, context : HandlerContext, data : object):
        # do things ...
        pass

您可以使用 forward references,即使用 service: "HandlerService" 而不是 service: HandlerService

请注意,在未来的 python 版本中,这将变得过时,因为注释评估顺序不会在函数定义时完成,而是在所有函数定义之后完成。您可以在 python 3.7 及更高版本中通过 from __future__ import annotations 导入开始使用此行为。有关详细信息,请参阅 PEP563