2011-09-08 13 views
5

は、私は、ツリーのノードは、ユーザーが作成したクラスのすべてのオブジェクトであるなぜstrは__str__ができるときに2番目のパラメータを取得できないのですか?

print tree 

のようなものを使用して、ツリー状の構造では、ツリーの内容を印刷するためのSTRを使用することを決めたと私は彼らの__str__魔法のメソッドをオーバーロード私はそのtパラメータでstrを呼び出すことはできませんが、私は唯一の魔法へのショートカット、.Isn't strnode.__ str__(t=4)を呼び出すことができますしかし、その

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

のようなインデントトンタブの後、子ノードのSTRを使用するために方法ですか?それは、pa rserは魔法をチェックせずに追加のパラメータをstrに拒否しますか?

P.S.私は行動に興味があります。それは木を印刷する最良の方法ではないことを知っています、それはハックでした;)

答えて

7

これを想像してみてください。

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

__str__は、より多くのパラメータを取ることができますので、ちょうどstrは、これらのパラメータを通過するように設定されていることを意味するものではありません。あなたはMethodeの__str__(self, t=0)でクラスCをお持ちの場合は

+0

あなたの例のようにstrが動作する場合、obj .__ str __()が例外につながることはありません。私の場合はそうではありません。 –

+0

私はそれを持って、申し訳ありません;) –

+0

@アレキサンダーイワノフ:コード内の '...'は説明の目的のためだけ*抜けたコード*です。私は 'str'を完全に実装するつもりはありませんでした。 –

1

str(c)が宣言され、ゼロにTを設定C.__str__(c)を呼び出します。 str()は1つの引数のみを受け入れます。