2017-06-29 6 views
0

私は辞書を持っている、とprint文は次のように:Python:どのようなprint(dict)出力を上書きするのですか?

d = {'ar':4, 'ma':4, 'family':pf.Normal()} 
print(d) 

私に与える

{'ar': 4, 'ma': 4, 'family': <pyflux.families.normal.Normal object at 0x11b6bc198>} 

「家族」キーの値をクリーンアップする方法はありますか?この問題を起こさずに他の辞書を使用していたので、単に「print(d)」のままにしておくことが重要です。これは可能ですか?御時間ありがとうございます。

EDIT:回答みんなのため

おかげで、私は右のように、1つをマークだろうが、私はそれらを試していないと確認できません。私はキーとしてクリーンアップされた文字列と値としてのオブジェクトを持つ別の辞書を作成しました。それはもう少し仕事でしたが、私はそれを読んだり応答したりする前にそれをやりました。それにもかかわらず、ありがとう!

+8

あなたは 'pf.Normal(へ' __repr __() '関数を追加したい'プリント(辞書) '出力は、)'どのように_it_を変更するにはどのようなチャゲしたくありません表示されています。私は正確に 'pf.Normal()'が何であるか分かりませんが、おそらくそれを継承し、カスタム '__repr __()'を追加しますか? –

答えて

2

私はpyfluxは外部のライブラリだと思うので、直接編集しないでください。あなたが望むことを簡単に行うには、Normalクラスの__str__または__repr__メソッドを上書きします。

pyflux.families.normal.Normal.__str__ = lambda self: "Clean up value here." 

ここでは、ラムダ関数を使用して説明しましたが、もちろん定義済みの関数を使用できます。

+1

Monkey patching special methodsが動作しない可能性があります - https://stackoverflow.com/questions/10376604/overriding-special-methods-on-an-instance –

+0

を参照してください。@PeterGibsonこれは猿のパッチが当てられているためです。 。 –

+0

@ juanpa.arrivillagaはい、そうです。ごめんなさい。 –

4

あなたは間違っています。 print(dict)が出力するものを変更する必要はありません。それは、組み込みの辞書が印刷される方法を変更する必要があります。 pf.Normal()オブジェクトにカスタム__repr__()を追加したいとします。

I believe pf.Normal() comes from the pyflux packageので、私はクラスが保持すると仮定されているもののデータを見て、クラスから継承することによって、それを印刷し、かなりお勧め:

class CustomNormalObject(pf.Normal): 
    def __repr__(self): 
     # Add pretty printed data here 
     pass 

それとも、カスタムクラスに独自の引数を渡す必要がある場合は、あなたはsuper()を使用することができます。

class CustomNormalObject(pf.Normal): 
    def __init__(self, myparm, *args, **kwargs): 
     # If using Python 3, you can call super without 
     # passing in any arguments. This is simply for Python 2 
     # compatibility. 
     super(CustomNormalObject, self).__init__(*args, **kwargs) 
     self.myparm = myparm 

    def __repr__(self): 
     # Add pretty printed data here 
     pass 
関連する問題