Как работает разрыв строки при возврате return?

Как вывести f-строку в выводе return в несколько строк?

Имеем такой код:

class SomeClass:

    def __init__(self, attr1, attr2, attr3):
        self._attr1 = attr1
        self._attr2 = attr2
        self._attr3 = attr3

    @property
    def attr1(self):
        return self._attr1

    @attr1.setter
    def attr1(self, value):
        self._attr1 = value

    @property
    def attr2(self):
        return self._attr2

    def set_attr2(self, value):
        self._attr2 = value

    attr2 = property(fset=set_attr2)

    def show_info(self):
        return f'attr1: {self.attr1}' + f"\n" + f'attr2: {self.attr2}'

Вводим в консоли:

class1.show_info()

Получаем:

'attr1: Attr1\nattr2: Attr2'

При использовании:

return f'attr1: {self.attr1}\nattr2: {self.attr2}'

результат тот же.

Вывод в идеале должен быть таким:

attr1: Attr1
attr2: Attr2

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

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

return просто возвращает значение строки "как есть", он ничего никуда не выводит. Если же вы сами выводите результат работы вашей функции в интерактивную консоль IPython (в ячейке Jupyter Notebook или в консоли PyCharm), то фактически при этом у показываемых объектов вызывается метод repr, чтобы более наглядно показать вам их содержимое. То есть как будто вызывается следующий код (можете сами запустить такой код с вашей строкой и убедиться):

print(repr(строка)) # строка или любой другой объект

В результате у строки показываются все спецсимволы в "сыром" виде. Хотите печатать строку так, чтобы управляющие символы делали то, что они должны делать при выводе на консоль (например, переводить строку) - просто печатайте строку через print и всё будет как нужно.

→ Ссылка