2011-09-08 18 views
5

postanowiłem wykorzystać str drukowanie zawartości drzewa w drzewiastej strukturze, używając coś podobnegoDlaczego str nie może uzyskać drugiego parametru, gdy __str__ może?

print tree 

Węzły drzewa są wszystkie obiekty klas utworzonych przez użytkownika i przeciążać ich __str__ magiczną metodę w celu wykorzystania str węzłów dziecka po tiret t kartach Like That

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

jednak nie mogę nazwać strt z tego parametru, ale mogę zadzwonić node.__ str__(t=4) .Isn't str, skrót tylko do magii metoda? Czy to dlatego, że pa rser odrzuca dodatkowe parametry do str bez sprawdzania metody magicznej?

P.S. Interesuje mnie zachowanie. Wiem, że to nie jest najlepszy sposób na wydrukowanie drzewa, to był hack;)

Odpowiedz

7

Wyobraź sobie to w ten sposób.

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

Tylko dlatego __str__ może zająć więcej parametrów, nie znaczy, że str jest skonfigurowany tak, aby przechodzić przez te parametry.

+0

ale jeśli str zachowuje się tak, jak w twoim przykładzie, zadziała, jeśli obj .__ str __() nie doprowadzi do wyjątku. I nie w moim przypadku. –

+0

Mam to, przepraszam;) –

+0

@Alexander Ivanov: "..." w kodzie to * pominięty kod *, tylko dla celów ilustracyjnych. Nie zamierzałem dać pełnej implementacji 'str'. –

1

Jeśli masz klasę C z Methode __str__(self, t=0), str(c) wezwie C.__str__(c) określający t do zera deklarowanego. str() sama przyjmuje tylko jeden argument.

Powiązane problemy