如何在IPython中漂亮地打印对象表示

8

默认情况下,IPython以漂亮的方式输出列表表示:

In [1]: test_list
Out[1]: [<object_1>,
         <object_2>,
         <object_3>]

我有一个对象,类似于:

class TestObject(object):
    def __init__(self):
        self._list = [<object_1>, <object_2>, <object_3>]

    def __repr__(self):
        return self._list.__repr__()

test_object = Test()

这个的IPython表示如下:

In [2]: test_list
Out[2]: [<object_1>, <object_2>, <object_3>]

有没有办法获取列表的表示方式来表示我的对象?

1
你的类 repr 正在使用常规列表 repr,而不是 Ipython 的。一个简单的解决方法是将你的 repr 更改为包括 \n - hpaulj
@kabanus:我已经将对象的repr变得漂亮了,我希望能够像IPython对普通列表一样,每个对象都打印在新行中。 - Domen Blenkuš
1
@hpaulj:谢谢你的建议,我会手动完成。我只是想知道是否有办法让IPython来完成它。 - Domen Blenkuš
1
你可以通过调用 IPython.lib.pretty.pretty(my_list),获取一个列表(或任何对象)的漂亮打印格式。 - Thomas K
谢谢@ThomasK,这就是我想要的! - Domen Blenkuš
显示剩余2条评论
1个回答

7
为了获得一个列表或任何对象的漂亮打印表示,调用: ```python print(repr(obj)) ```
from IPython.lib.pretty import pretty
pretty(obj)

如果你想让你的对象有一个漂亮的 repr(输出格式),与其普通的 repr 分开(例如,不需要 IPython 来 repr() 它),你可以定义一个 _repr_pretty_(self, cycle=False) 方法。cycle 参数如果输出递归,则为 True,例如,如果你把一个容器放在它自己里面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接