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

时间:2018-12-25 17:46:01

标签: python python-3.x circular-dependency type-hinting typehints

我知道通常不建议使用循环依赖关系-但是,在C#和TypeScript中,我有时发现它们很有用。可能是因为我缺乏python的经验,或者可能是我在想错方法或错过了google的正确词。我该如何解决以下问题?

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

1 个答案:

答案 0 :(得分:3)

您可以使用forward references,即使用service: "HandlerService"代替service: HandlerService

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