Для функции 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__
для функции?