两个具有循环依赖关系的相互依赖 类 的类型提示
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。
我知道通常不鼓励循环依赖——但是,在 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。