I have written a class in python that implements __str__(self)
but when I use print on a list containing instances of this class, I just get the default output <__main__.DSequence instance at 0x4b8c10>
. Is there another magic function I need to implement to get this to work, or do I have to write a custom print function?
Here's the class:
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]
Yes, you need to use __repr__
. A quick example of its behavior:
>>> 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__'
However, if you don't define a __str__
, it falls back to __repr__
, although this isn't recommended:
>>> class Foo:
... def __repr__(self):
... return '__repr__'
...
>>> bar = Foo()
>>> bar
__repr__
>>> print bar
__repr__
All things considered, as the manual recommends, __repr__
is used for debugging and should return something repr
esentative of the object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With