You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python装饰器Bug排查:类方法调用返回None而非预期值

问题分析与修复方案

你遇到的问题核心在于装饰器的wrapper函数没有返回原函数的执行结果。

咱们来理清楚背后的逻辑:

  • 当你用@LogClassFuncInfos装饰getName方法后,调用a.getName()本质上执行的是装饰器里的wrapper函数
  • 原getName方法会返回self.name(也就是'test'),但你的wrapper函数只调用了func(*s, **gs),却没把这个返回值传递出去
  • Python里如果函数没有显式的return语句,默认会返回None,这就是你看到输出None的原因

修复后的代码

只需要在wrapper函数里添加一行返回原函数执行结果的代码即可:

import time
import sys
def LogClassFuncInfos(func):
    def wrapper(*s, **gs):
        methodName = format(func.__name__)
        print(methodName)
        # 返回原函数的执行结果,补上这一行就解决问题了
        return func(*s, **gs)
    return wrapper
class NameModel():
    def __init__(self):
        self.name = 'test'
    @LogClassFuncInfos
    def getName(self):
        return self.name
a = NameModel()
print(a.getName())

验证结果

运行修复后的代码,会先打印方法名getName,然后输出你预期的test,完全符合需求。

内容的提问来源于stack exchange,提问作者Qiang Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:19:08