En Python, je peux faire:
>>> list = ['a', 'b', 'c']
>>> ', '.join(list)
'a, b, c'
Existe-t-il un moyen simple de faire de même lorsque j'ai une liste d'objets?
>>> 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
Ou dois-je recourir à une boucle for?
map
expression soi-disant moins lisible (ci-dessous).map
solution.Le constructeur de chaîne intégré appellera automatiquement
obj.__str__
:la source
reduce
était celle qui avait été supprimée, car elle laissait généralement les gens deviner et n'était donc pas "pythonique".map
d'autre part n'est pas un problème.une autre solution consiste à remplacer l'opérateur de jointure de la classe str.
Définissons une nouvelle classe my_string comme suit
Ensuite, vous pouvez faire
et vous obtenez
BTW, en utilisant list comme nom de variable, vous redéfinissez la classe list (mot-clé)! Utilisez de préférence un autre nom d'identifiant.
J'espère que vous trouverez ma réponse utile.
la source
Je sais que c'est un super vieux post, mais je pense que ce qui manque est primordial
__repr__
, de sorte que__repr__ = __str__
, qui est la réponse acceptée de cette question marquée en double .la source