如何为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
相关产品推荐
相关产品推荐

