gpt4 book ai didi

python-3.x - Python 类型提示在函数中返回类

转载 作者:行者123 更新时间:2023-12-03 16:26:03 27 4
gpt4 key购买 nike

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

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

最佳答案

注释是没有意义的,因为你的函数返回一个新的、不同的 Bar 的实例。每次调用类。

换句话说,没有人Bar您可以检查类型的类。 type(foo(1)) is type(foo(2))的结果总是会是假的,所以对 type(foo(1)) 进行类型检查传入 foo(2) 总是会失败也。

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

class BaseBar: pass

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

为了使它更易读,可以将基类命名为 Bar并且该函数可以产生 BarImplConcreteBar或类似。这样你就可以继续使用 Bar在类型注释中无处不在以减少混淆。

您实际上似乎不需要每次都创建一个新类;类中的任何内容都没有参数化或使用闭包;如果这适用于您的实际代码,那么您可以在函数之外定义它:
class Bar:
def __init__(i: int):
self.i = i

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

关于python-3.x - Python 类型提示在函数中返回类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40149768/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com