可以改变一个函数的repr在python中

可以改变一个函数的repr在python中

本文介绍了可以改变一个函数的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中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-01 23:14