我知道通常不建议使用循环依赖关系-但是,在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
答案 0 :(得分:3)
您可以使用forward references,即使用service: "HandlerService"
代替service: HandlerService
。
请注意,在将来的python版本中,这将变得过时,因为注释评估顺序不会在函数定义时执行,而是在所有定义之后进行。您可以在python 3.7及更高版本中通过from __future__ import annotations
导入开始使用此行为。有关详细信息,请参见PEP563。