本文介绍了可以改变一个函数的repr在python中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我只看到了在类定义中设置 __ repr __
方法的例子。是否可以在定义中或在定义它们之后更改函数的 __ repr __
?
I've only seen examples for setting the __repr__
method in class definitions. Is it possible to change the __repr__
for functions either in their definitions or after defining them?
我试过没有成功......
I've attempted without success...
>>> def f():
pass
>>> f
<function f at 0x1026730c8>
>>> f.__repr__ = lambda: '<New repr>'
>>> f
<function __main__.f>
推荐答案
是的,如果您愿意放弃该功能实际上是一个功能。
Yes, if you're willing to forgo the function actually being a function.
首先,为我们的新类型定义一个类:
First, define a class for our new type:
import functools
class reprwrapper(object):
def __init__(self, repr, func):
self._repr = repr
self._func = func
functools.update_wrapper(self, func)
def __call__(self, *args, **kw):
return self._func(*args, **kw)
def __repr__(self):
return self._repr(self._func)
添加装饰器函数:
Add in a decorator function:
def withrepr(reprfun):
def _wrap(func):
return reprwrapper(reprfun, func)
return _wrap
现在我们可以用函数定义repr:
And now we can define the repr along with the function:
@withrepr(lambda x: "<Func: %s>" % x.__name__)
def mul42(y):
return y*42
现在 repr(mul42)
产生'< Func:mul42>'
这篇关于可以改变一个函数的repr在python中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!