私は、クラス定義で__repr__
メソッドを設定するための例しか見ていません。関数の定義を変更したり、定義した後に、関数のために__repr__
を変更することは可能ですか?Pythonで関数のreprを変更することはできますか?
repr(f)
ではなくtype(f).__repr__(f)
として行われているので、私は、ありません...成功せず
>>> def f():
pass
>>> f
<function f at 0x1026730c8>
>>> f.__repr__ = lambda: '<New repr>'
>>> f
<function __main__.f>
デコレータに 'functools.wraps'を使って修飾された関数の名前とドキュメントストリングを更新してください。 – schlamar
問題は、 'print mul42 .__ name__'は、関数に期待されないAttributeErrorを発生させることです。したがって、これを修正するには 'return wraps(func)(reprwrapper(reprfun、func))'となります。 – schlamar
@ ms4pyこの場合、私は 'update_wrapper'がやや適切/直接的だと思います。私は、コンストラクタでこれを行うようにラッパークラスを変更しました。このようにして、 'withrepr'デコレータを使用する代わりにクラスを直接使用しても、更新が行われます。 – kwatford