Я изучаю веревки в Python. Когда я пытаюсь напечатать объект класса, Foobar
используя print()
функцию, я получаю вывод, подобный этому:
<__main__.Foobar instance at 0x7ff2a18c>
Есть ли способ, которым я могу установить поведение печати (или строковое представление ) класса и его объектов ? Например, когда я вызываю print()
объект класса, я хотел бы напечатать его элементы данных в определенном формате. Как этого добиться в Python?
Если вы знакомы с классами C ++, то для стандарта можно достичь выше ostream
, добавив friend ostream& operator << (ostream&, const Foobar&)
метод для класса.
Как упоминал Крис Латс , это определяется
__repr__
методом в вашем классе.Из документации
repr()
:Дан следующий класс Test:
..it будет действовать следующим образом в оболочке Python:
Если
__str__
метод не определен,print(t)
(илиprint(str(t))
) будет использовать результат__repr__
вместоЕсли
__repr__
метод не определен, то используется значение по умолчанию, которое в значительной степени эквивалентно ..источник
__str__
отличается от результатов интерактивной оболочки, которые вы даете. : P%
Строка форматирования не рекомендуется, от docs.python.org/whatsnew/2.6.html «оператор% будет дополнен более мощным строки метод, формат (форматирование)»%
было очень удобно.Общий способ, который можно применить к любому классу без специального форматирования, можно сделать следующим образом:
А потом,
производит
источник
Если вы находитесь в такой ситуации, как @Keith, вы можете попробовать:
Это идет вразрез с тем, что я считаю хорошим стилем, но если вы просто пытаетесь отлаживать, тогда он должен делать то, что вы хотите.
источник
Чтобы добавить мои два цента к ответу @ dbr, ниже приведен пример того, как реализовать это предложение из приведенной им официальной документации:
Учитывая это определение класса:
Теперь легко сериализовать экземпляр
Test
класса:Итак, запустив последний кусок кода, мы получим:
Но, как я сказал в своем последнем комментарии: больше информации только здесь !
источник
Вам нужно использовать
__repr__
. Это стандартная функция, как__init__
. Например:источник
Более симпатичная версия ответа от @ user394430
Создает визуально приятный список имен и значений.
Еще более модная версия (спасибо Рууду) сортирует предметы:
источник
Для Python 3:
Если конкретный формат не важен (например, для отладки), просто наследуйте от класса Printable ниже. Нет необходимости писать код для каждого объекта.
Вдохновленный этим ответом
источник
В этой ветке уже есть много ответов, но ни один из них мне особо не помог, мне пришлось самому решать их, поэтому я надеюсь, что этот будет немного более информативным.
Вы просто должны убедиться, что у вас есть скобки в конце вашего класса, например:
Вот пример кода из проекта, над которым я работал:
Чтобы напечатать мой класс Водорода, я использовал следующее:
Обратите внимание, что это не будет работать без скобок в конце водорода. Они необходимы.
Надеюсь, это поможет, дайте мне знать, если у вас есть еще вопросы.
источник