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
并且函数可以生成 BarImpl
或 ConcreteBar
或类似的。这样您就可以在任何地方的类型注释中继续使用 Bar
以减少混淆。
您实际上似乎不需要每次都创建一个新的class; class 中没有任何参数化或使用闭包;如果这对于您的实际代码是正确的,那么您可以在 外部 函数中定义它:
class Bar:
def __init__(i: int):
self.i = i
def foo(i: int) -> Bar:
return Bar(i)
我有一个类似于下面的功能。我想要 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
并且函数可以生成 BarImpl
或 ConcreteBar
或类似的。这样您就可以在任何地方的类型注释中继续使用 Bar
以减少混淆。
您实际上似乎不需要每次都创建一个新的class; class 中没有任何参数化或使用闭包;如果这对于您的实际代码是正确的,那么您可以在 外部 函数中定义它:
class Bar:
def __init__(i: int):
self.i = i
def foo(i: int) -> Bar:
return Bar(i)