В Python я могу сделать:
>>> list = ['a', 'b', 'c']
>>> ', '.join(list)
'a, b, c'
Есть ли простой способ сделать то же самое, когда у меня есть список объектов?
>>> 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
Или я должен прибегнуть к циклу?
map
выражение (ниже).map
решения.Встроенный строковый конструктор автоматически вызовет
obj.__str__
:источник
reduce
это был тот, который был удален, потому что он обычно заставлял людей угадывать и, таким образом, не был "питоническим"map
с другой стороны это не проблема.Другое решение - переопределить оператор соединения класса str.
Давайте определим новый класс my_string следующим образом
Тогда вы можете сделать
и вы получите
Кстати, используя список в качестве имени переменной, вы переопределяете класс списка (ключевое слово)! Желательно использовать другое имя идентификатора.
Надеюсь, вы найдете мой ответ полезным.
источник
Я знаю, что это очень старый пост, но я думаю, что пропущено переопределяет
__repr__
, так что__repr__ = __str__
, который является принятым ответом на этот вопрос, отмечен как дубликат .источник