Для функции foo:
def foo(x):
pass
Печать своего представления путем вызова str или repr дает вам что-то скучное:
str(foo)
'<function foo at 0x119e0c8c8>'
Я хотел бы знать, можно ли переопределить метод __str__ для печати чего-то другого. По сути, я бы хотел:
str(foo)
"I'm foo!'
Теперь я понимаю, что описание функции должно исходить из __doc__ которая является функцией docstring. Однако это всего лишь эксперимент.
При попытке найти решение этой проблемы я столкнулся с внедрением __str__ для classes: как определить метод __str__ для класса?
Этот подход включал определение метакласса с помощью метода __str__, а затем попытку назначить крюк __metaclass__ в фактическом классе.
Я задавался вопросом, можно ли сделать так же, что и классная function, поэтому вот что я пробовал -
In [355]: foo.__class__
Out[355]: function
In [356]: class fancyfunction(type):
...: def __str__(self):
...: return self.__name__
...:
In [357]: foo.__class__.__metaclass__ = fancyfunction
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Я полагал, что это не сработает, но это стоило того!
Итак, какой лучший способ реализовать __str__ для функции?