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

如何为Python函数添加__str__方法以自定义打印输出

让Python函数打印时返回自定义字符串的方法

在Python里,函数也是对象,我们可以通过修改它的__repr__或__str__属性,来让它在被打印(或直接在交互环境中显示)时返回你想要的字符串,而不是默认的<function __main__.loss>格式。这里有两种简单的实现方式:

方法一:直接修改函数的属性

定义完函数后,直接给它的__repr__和__str__属性赋值一个返回目标字符串的lambda函数:

import tensorflow.keras.backend as backend

def loss(y_true, y_pred):
    return backend.sum(backend.abs(y_true - y_pred))

# 自定义打印时显示的字符串
loss.__repr__ = lambda: "Absolute Error Sum"
loss.__str__ = lambda: "Absolute Error Sum"

# 测试效果
print(loss)  # 输出:Absolute Error Sum

方法二:用装饰器优雅实现

如果需要给多个函数设置自定义显示名,用装饰器会更整洁,也更符合Python的代码风格:

import tensorflow.keras.backend as backend

def custom_function_display(name):
    def decorator(func):
        # 同时设置__repr__和__str__,覆盖默认行为
        func.__repr__ = lambda: name
        func.__str__ = lambda: name
        return func
    return decorator

# 用装饰器装饰你的损失函数
@custom_function_display("Absolute Error Sum")
def loss(y_true, y_pred):
    return backend.sum(backend.abs(y_true - y_pred))

# 测试效果
print(loss)  # 输出:Absolute Error Sum

为什么这能生效?

Python中的函数属于function类的实例,默认的__repr__方法会返回类似<function module.function>的字符串。但因为函数是可变对象,我们可以直接替换它的__repr__和__str__方法,让它们返回我们自定义的内容。这和类中定义__repr__方法的逻辑本质是一样的——都是重写对象的字符串表示方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:27:49