Да, если вы хотите отказаться от функции, фактически являющейся функцией.
Сначала определите класс для нашего нового типа:
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)
Добавьте в декоратор function:
def withrepr(reprfun):
def _wrap(func):
return reprwrapper(reprfun, func)
return _wrap
И теперь мы можем определить репер вместе с функцией:
@withrepr(lambda x: "<Func: %s>" % x.__name__)
def mul42(y):
return y*42
Теперь repr(mul42)
создает '<Func: mul42>'