2011-09-08 18 views
5

Ben__str__, str neden ikinci bir parametre alamıyor?

print tree 
ağacın düğümleri

kullanıcı tarafından oluşturulan sınıflarının tüm nesnelerdir gibi bir şey kullanarak, ağaç benzeri bir yapıda bir ağacın içeriğini yazdırmak için str kullanmaya karar verdi ve ben onların __str__ sihirli yöntem aşırı .Isn't str o t parametresi ile str diyemezsin ama node.__ str__(t=4) çağırabilir ancak bu

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

gibi girinti t sekmelerin sonra çocuk düğümlerin str kullanmak için, sadece büyü kısayol yöntem mi yoksa pa mi? Rser, sihirli yöntemi kontrol etmeden str'a ek paramları reddeder mi?

P.S. Davranışla ilgileniyorum. Bir ağacın yazdırılmasının en iyi yolu olmadığını biliyorum, bir kesmek oldu;)

cevap

7

Bu şekilde düşünün. __str__ daha fazla parametre alabilir çünkü

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

Sadece str bu parametreleri geçmesi yapılandırılmamış olduğu anlamına gelmez. Eğer bir Methode __str__(self, t=0) olan bir sınıf C varsa

+0

ama str örneğinizde olduğu gibi davranırsa, it_str __() öğesi istisnaya yol açmazsa çalışır. Benim durumumda değil. –

+0

anladım, üzgünüm;) –

+0

@Alexander Ivanov: Koddaki "..." kodu, sadece örnekleme amaçlıdır. Str'nin eksiksiz bir şekilde uygulanmasını istemedim. –

1

, str(c) ilan olarak sıfıra t ayarlar C.__str__(c) arayacak. str() sadece bir bağımsız değişkeni kabul eder.