如何在Python中打印列表、字典或对象集合

22 投票
2 回答
17873 浏览
提问于 2025-04-15 11:39

我写了一个Python类,并且实现了__str__(self)这个方法。但是当我打印一个包含这个类实例的列表时,输出的却是默认的内容<__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]

2 个回答

1

这里有一个小改进,可以避免使用 + 来连接字符串:

def __str__(self):
  return '[%s] -> [%s]' % (self.sid, self.seq)
24

是的,你需要使用 __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__ 是用来调试的,应该返回一些能代表这个对象的内容。

撰写回答