En Python, puedo hacer:
>>> list = ['a', 'b', 'c']
>>> ', '.join(list)
'a, b, c'
¿Hay alguna manera fácil de hacer lo mismo cuando tengo una lista de objetos?
>>> class Obj:
... def __str__(self):
... return 'name'
...
>>> list = [Obj(), Obj(), Obj()]
>>> ', '.join(list)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, instance found
¿O tengo que recurrir a un bucle for?
map
expresión supuestamente menos legible (abajo).map
solución.El constructor de cadenas incorporado llamará automáticamente
obj.__str__
:fuente
reduce
fue el que se eliminó, porque generalmente dejaba a la gente adivinando y, por lo tanto, no era "pitónico".map
Por otro lado, no es un problema.Otra solución es anular el operador de unión de la clase str.
Definamos una nueva clase my_string de la siguiente manera
Entonces puedes hacer
y obtienes
Por cierto, al usar la lista como nombre de variable, está redefiniendo la clase de lista (palabra clave) Preferiblemente use otro nombre de identificador.
Espero que mi respuesta sea útil.
fuente
Sé que esta es una publicación súper antigua, pero creo que lo que se pierde es anular
__repr__
, por lo que esa__repr__ = __str__
es la respuesta aceptada de esta pregunta marcada como duplicada .fuente