作成したモジュールでIPythonを試しましたが、クラスオブジェクトの実際の表現が表示されません。代わりにそれは次のようなものを示しています
TheClass.__module__ + '.' + TheClass.__name__
このモジュールではメタクラスを多用しており、ユーザーに表示する必要のある本当に意味のあるクラス表現があります。
このアプリケーションではまったく役に立たないこの名前空間の代わりに、正しい表現を利用できるようにするために変更できるIPython固有のメソッドはありますか?
または、それが不可能な場合、IPythonのバージョンをカスタマイズして必要な情報を表示するにはどうすればよいですか?
編集
補足情報として、クラスを取得して__module__
属性をたとえばNoneに変更すると、表現を表示しようとすると、このトレースバックが発生します。
Traceback (most recent call last):
... [Huge traceback] ...
File "C:\Python32\lib\site-packages\IPython\lib\pretty.py", line 599, in _type_pprint
name = obj.__module__ + '.' + obj.__name__
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
したがって、私の期待は正しかったので、この関数はクラスオブジェクトを表示するために使用されます。
def _type_pprint(obj, p, cycle):
クラスでカスタマイズしてみましたが、うまくいかないと思います。このモジュールには、この関数とリンクしている(メタクラスの親)IPython.lib.pretty
大きな辞書があります。type
編集2
私が試したこと:
_repr_pretty_
関数をメタクラスに追加します。インスタンスでは機能しますが、クラスでは機能しません...- この関数を使用します。上に書いた大きな辞書を変更するだけで、インスタンスによって作成されたそのコピーは変更されません...したがって、この関数はまったく役に立ちませんか?!
IPython.lib.pretty
.for_type(typ, func)
RepresentationPrinter
- 魔法の関数を呼び出す
%pprint
。__repr__
すべてのオブジェクトにデフォルトのPythonを使用して、このきれいな印刷機能を無効(または有効)にします。リスト、dict、その他多くのきれいな印刷がとてもいいので、それは悪いことです。
最初のアプローチは、環境に影響を与えず、このクラスに固有であるため、私が望むものです。