如何为带类型提示的Python函数编写装饰器?我的装饰器返回None
问题分析与解决
你的装饰器返回None的核心原因是:内部包装函数Inner_Function没有返回被装饰函数的执行结果。
Python中,函数如果没有显式的return语句,默认会返回None。你当前的Inner_Function只是调用了原函数func(*args, **kwargs),但没有把这个调用的结果返回出去,所以当你调用被装饰后的is_cold时,实际得到的是Inner_Function的默认返回值None。
修正后的代码
def do_nothing(func): def Inner_Function(*args, **kwargs): # 返回原函数的执行结果 return func(*args, **kwargs) return Inner_Function @do_nothing def is_cold(name: str) -> bool: return True g = is_cold("hi") print(g) >> True
额外优化:保留原函数元信息(可选)
如果需要让装饰器保留原函数的名称、文档字符串、类型提示等元信息(方便类型检查工具或调试),可以使用functools.wraps装饰内部包装函数:
import functools def do_nothing(func): @functools.wraps(func) def Inner_Function(*args, **kwargs): return func(*args, **kwargs) return Inner_Function @do_nothing def is_cold(name: str) -> bool: return True
内容的提问来源于stack exchange,提问作者gobigorgobald
相关产品推荐
相关产品推荐

