Как распечатать список, dict или коллекцию объектов в Python
Я написал класс в python, который реализует __str__(self)
, но когда я использую print в списке, содержащем экземпляры этого класса, я просто получаю вывод по умолчанию <__main__.DSequence instance at 0x4b8c10>
. Есть ли еще одна магическая функция, которую мне нужно реализовать, чтобы заставить ее работать, или мне нужно написать собственную функцию печати?
Здесь класс:
class DSequence:
def __init__(self, sid, seq):
"""Sequence object for a dummy dna string"""
self.sid = sid
self.seq = seq
def __iter__(self):
return self
def __str__(self):
return '[' + str(self.sid) + '] -> [' + str(self.seq) + ']'
def next(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.seq[self.index]
Ответы
Ответ 1
Да, вам нужно использовать __repr__
. Быстрый пример его поведения:
>>> class Foo:
... def __str__(self):
... return '__str__'
... def __repr__(self):
... return '__repr__'
...
>>> bar = Foo()
>>> bar
__repr__
>>> print bar
__str__
>>> repr(bar)
'__repr__'
>>> str(bar)
'__str__'
Однако, если вы не определяете __str__
, он возвращается к __repr__
, хотя это не рекомендуется:
>>> class Foo:
... def __repr__(self):
... return '__repr__'
...
>>> bar = Foo()
>>> bar
__repr__
>>> print bar
__repr__
Все, что рекомендуется, как рекомендует руководство, __repr__
используется для отладки и должно возвращать что-то repr
esentative объекта.
Ответ 2
Просто небольшое улучшение, избегающее + для конкатенации:
def __str__(self):
return '[%s] -> [%s]' % (self.sid, self.seq)