首页 > 解决方案 > 具有循环依赖的两个相互依赖的类的类型提示

问题描述

我知道循环依赖通常不被鼓励——然而,在 C# 和 TypeScript 中,我有时发现它们很有用。这可能是我缺乏使用 python 的经验,或者我想错了方式或错过了谷歌搜索的正确词。我将如何解决以下问题?

我正在尝试创建一个处理请求的类,并且每个处理事件都伴随着一个上下文。所以,我想创建处理程序类和上下文类 - 但它们是依赖的,并且 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

标签: pythonpython-3.xcircular-dependencytype-hinting

解决方案


您可以使用前向引用,即使用service: "HandlerService"而不是service: HandlerService

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


推荐阅读