Python:如何为函数添加__str__

时间:2018-03-24 01:08:06

标签: python function

当我打印我的功能(没有函数调用)时,

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

我有点像

<function __main__.loss>

我需要它来返回一个像

这样的字符串
Absolute Error Sum

大多数links我看过解释如何对类对象做同样的事情。如何定义函数应返回的字符串?

2 个答案:

答案 0 :(得分:1)

您应该可以编辑它的__name__属性:

>>> def f(x): print(x)

>>> f
<function f at 0x7feb2c843a28>

>>> f.__name__ = 'my function'

>>> f
<function my function at 0x7feb2c843a28>

>>> f.__name__
my function

编辑:请注意,在Python 3中,您可能需要改写__qualname__属性(请参阅https://www.python.org/dev/peps/pep-3155/https://github.com/ipython/ipython/issues/5566/)。

答案 1 :(得分:0)

您无法自定义功能类型的默认repr,但您可以提取您关注的部分并根据需要对其进行格式化。

例如,如果您想要一个更友好的名称,实际名称将存储在__name__中,因此如果您想避免额外包装,可以print(loss.__name__)。这并不完美(例如lambda函数没有名称),但它比尝试重写函数的默认repr更好。