gpt4 book ai didi

python - 装饰器更改返回类型时键入函数

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:21 25 4
gpt4 key购买 nike

如何正确编写返回类型被装饰器修改的函数的类型?

简单的例子:

def example_decorator(fn):
def wrapper(data):
res = fn(data)
return ', '.join(res)

return wrapper


@example_decorator
def func(data: list): # -> ???? str ? list ?
new_data = data
new_data.append('XYZ')
return new_data


# When we type func -> list

def test() -> str:
result = func(['ABC', 'EFG'])
print(type(result)) # <class 'str'>
return result # Incompatible return type [7]: Expected str but got list.


test()

最佳答案

可能是类型检查器问题。解决方案如下。使用 mypy 没问题,但 pycharmpyre-check 正在提示。

from typing import *

def example_decorator(
fn: Callable[[List[str]], List[str]]
) -> Callable[[List[str]], str]:
def wrapper(data: List[str]) -> str:
res = fn(data)
return ', '.join(res)

return wrapper


@example_decorator
def func(data: List[str]) -> List[str]:
data.append('XYZ')
return data


def test() -> str:
result = func(['ABC', 'EFG'])
print(type(result)) # <class 'str'>
return result


test()

关于python - 装饰器更改返回类型时键入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57409421/

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