2011-09-08 16 views
5

decidí usar str para imprimir el contenido de un árbol en estructura de árbol, usando algo como¿Por qué str no puede obtener un segundo parámetro cuando __str__ puede?

print tree 

Los nodos del árbol son todos los objetos de clases creados por el usuario y que sobrecargue su método mágico __str__ con el fin de utilizar str los nodos hijos después de t tabulaciones de sangría como que

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

sin embargo no puedo llamar con str que t parámetro, pero puedo llamar node.__ str__(t=4) .Isn't str, único atajo a la magia método? O es que porque el pa ¿rser rechaza params adicionales a str sin verificar el método mágico?

P.S. Estoy interesado en el comportamiento. Sé que no es la mejor manera de imprimir un árbol, fue un truco;)

Respuesta

7

Imagínelo de esta manera.

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

El hecho de que __str__ puede tener más parámetros, no quiere decir que str está configurado para pasar a través de esos parámetros.

+0

pero si str se comporta como en su ejemplo, funcionará si obj .__ str __() no da lugar a excepción. Y en mi caso no. –

+0

lo tengo, lo siento;) –

+0

@ Alexander Ivanov: El '...' en el código es * código omitido *, solo con fines ilustrativos. No tenía la intención de dar una implementación completa de 'str'. –

1

Si usted tiene una clase C con un méthode __str__(self, t=0), str(c) llamarán C.__str__(c) que establece t de cero como sea declarada. str() solo acepta un argumento.

Cuestiones relacionadas