Как вывести объект в списке в строчном виде?

Есть код:

class Object:
def __init__(self, name, value):
    self.name = name
    self.value = value

def __str__(self):
    return str(self.name) + ": " + str(self.value)


# Список - массив ссылок на объекты
test_list = [Object("Name", 32), 3405, "hello"]
print(test_list)  # Выводит - [<__main__.Object object at 0x00000139E226FFD0>, 3405, 'hello']
test_list = list(map(str, test_list))
print(test_list) # Выводит - ['Name: 32', '3405', 'hello']

Вопрос:

  1. Почему объект не приводится к строке, хотя реализован метод str? Отдельно, не в списке, объект успешно приводится к строке ('Name: 32')

Ответы (1 шт):

Автор решения: CrazyElf

Потому что при выводе на печать контейнера (спасибо GrAnd за уточнение) используется другой метод, который нужно реализовать в классе:

    def __repr__(self):
        return str(self)

Про сортировку у вас вопрос не дописан, но там тоже нужно реализовать некоторые методы класса. См. документацию, в современном питоне достаточно реализовать всего пару методов - один сравнения и один равенства и задекорировать класс специальным декоратором, остальное питон сделает сам.

→ Ссылка