【问题标题】:Type-hints for two interdependent classes with circular dependencies [duplicate]具有循环依赖关系的两个相互依赖的类的类型提示[重复]
【发布时间】:2019-05-24 06:25:18
【问题描述】:

我知道循环依赖通常不被鼓励——然而,在 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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。前向引用似乎工作得很好,我在 vscode 中使用了它。然而,从期货的进口并没有做到这一点。再次感谢。
    • 是的,未来的导入可能无法在您的 IDE 中正常工作。 (如果你想尝试的话,还要确保你至少在 3.7 上)
    猜你喜欢
    • 2018-11-17
    • 2011-09-18
    • 2013-10-21
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2013-03-18
    • 2018-08-24
    相关资源
    最近更新 更多