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

如何修改装饰器Logger的get_name方法使__init__正确输出所属类名

解决方案

问题根因

你当前的get_name方法存在逻辑错误:func.__class__取的是函数对象本身的所属类,所有普通函数的__class__.__name__都是固定值function,自然无法拿到__init__所属的业务类名称。

修改方案

Python为所有函数提供了__qualname__属性,该属性会存储函数定义时的完整层级路径:对于定义在类内部的方法,__qualname__的格式为类名.方法名(嵌套类场景下会显示完整层级外层类.嵌套类.方法名),拆分该字符串即可拿到__init__所属的类名。

修改后的Logger类的get_name静态方法代码如下:

@staticmethod
def get_name(func):
    if func.__name__ == '__init__':
        # 拆分__qualname__取倒数第二个元素,兼容嵌套类场景,拿到方法直接所属的类名
        class_name = func.__qualname__.split('.')[-2]
        return f'__init__ {class_name}'
    return func.__name__

效果验证

修改后重新执行测试代码,输出将完全符合预期:

>>> test = Tester()
INFO: Starting: __init__ Tester.
<class '__main__.Tester'>

>>> test.func(3)
INFO: Starting: func. 
9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:00:03