2017-06-29 60 views
0

我有一本字典,並打印聲明如下: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>} 

有什麼辦法來清理「家庭」項的值?調用仍然只是「打印(d)」,因爲它用於打印沒有此問題的其他字典,這一點很重要。這可能嗎?謝謝你的時間。

編輯:

感謝您的回答傢伙,我將標誌着一個爲正確的,但我還沒有嘗試過,也無法確認。我最終創建了另一個字典,將清理後的字符串作爲關鍵字,並將對象作爲值。這是一個更多的工作,但我在閱讀/得到答覆之前就做了,所以我堅持下去。不過謝謝!

+8

你不想恰克什麼'打印(字典)'輸出,你想一個'__repr __()'函數添加到'pf.Normal()'改變如何_it_被展示。我不確定'pf.Normal()'是什麼,但可能從它繼承並添加一個自定義'__repr __()'? –

回答

2

因爲我認爲pyflux是一個外部庫,我認爲你不應該直接編輯它。一種簡單的方法可以覆蓋Normal類的__str____repr__方法。

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

這裏我使用了一個lambda函數來說明,但是當然你可以使用一個已定義的函數。

+1

猴子補丁特殊方法可能無法正常工作 - 請參閱https://stackoverflow.com/questions/10376604/overriding-special-methods-on-an-instance –

+0

@PeterGibson這很好,因爲它正在猴子補丁*上課* 。 –

+0

@ juanpa.arrivillaga是的,你說得對。應該工作抱歉。 –

4

你錯了。你不想改變什麼print(dict)輸出。這將需要改變內置字典的打印方式。您想要將自定義__repr__()添加到您的pf.Normal()對象中。

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