2011-09-08 27 views
5

我決定使用STR用於打印樹的內容在樹狀結構,使用類似當__str__可以的時候,爲什麼str不能獲得第二個參數?

print tree 

樹的節點是用戶創建的類的所有對象和我過載的__str__魔術方法爲了使用子節點海峽縮進牛逼的標籤一樣,

def __str__ (self,t=0) :` 
    return t*'\t' + str(self.label) +':' +'\n'+ str(self.l,t+1)+'\n'+str(self.right,t+1)+'\n' 

後,但是我不能叫strt參數,但我可以打電話node.__ str__(t=4) .Isn't str,唯一捷徑魔方法?還是那是因爲pa rser拒絕額外的參數str沒有檢查神奇的方法?

P.S.我對這種行爲感興趣。我知道這不是打印樹木的最佳方式,但它是一種黑客;)

回答

7

想象一下這樣。

def str(obj): 
    try: 
     return obj.__str__() 
    except ...: 
     ... 

只是因爲__str__可以採取更多的參數,並不意味着str被配置爲通過傳遞這些參數。

+0

但是如果str的行爲與你的例子一樣,如果obj .__ str __()不會導致異常,它就會起作用。它並不適用於我的情況。 –

+0

我明白了,對不起;) –

+0

@亞歷山大·伊凡諾夫:代碼中的'...'是*省略代碼*,僅供參考。我並不打算給出一個完整的'str'的​​實現。 –

1

如果你有一類C有梅索德__str__(self, t=0)str(c)將調用C.__str__(c)所申報的這臺T設置爲零。 str()本身只接受一個參數。

相關問題