Python 在函数中键入提示 return class

Python type hinting to return class in function

我有一个类似于下面的功能。我想要 return Bar 的类型提示,但这似乎无效。有没有办法做到这一点,或者我是否必须将 class 移到函数外部以将其作为 return 类型引用?

def foo(i: int) -> Bar:
    class Bar:
        def __init__(i: int):
            self.i = i
    return Bar(i)

注解是没有意义的,因为你的函数 returns 每次调用时 新的、不同的 Bar class 实例。

换句话说,没有 one Bar class 可以检查类型。 type(foo(1)) is type(foo(2)) 的结果是 总是 false,所以当你也传入 foo(2) 时,针对 type(foo(1)) 的类型检查总是会失败.

如果你想在这里应用类型检查,你需要声明一个基class:

class BaseBar: pass

def foo(i: int) -> BaseBar:
    class Bar(BaseBar):
        def __init__(i: int):
            self.i = i
    return Bar(i)

为了使其更具可读性,可以将基 class 命名为 Bar 并且函数可以生成 BarImplConcreteBar 或类似的。这样您就可以在任何地方的类型注释中继续使用 Bar 以减少混淆。

您实际上似乎不需要每次都创建一个新的class; class 中没有任何参数化或使用闭包;如果这对于您的实际代码是正确的,那么您可以在 外部 函数中定义它:

class Bar:
    def __init__(i: int):
        self.i = i

def foo(i: int) -> Bar:
    return Bar(i)