首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPython _repr_html_

IPython _repr_html_
EN

Stack Overflow用户
提问于 2014-11-26 01:34:42
回答 2查看 8.8K关注 0票数 5

我非常喜欢如何在IPython笔记本中添加一个名为_repr_html_()的类方法,以打印类的丰富HTML版本。

是否有一种方法可以显式地强制输出,例如,如果我想同时打印两个对象?

代码语言:javascript
复制
print obj1, obj2

下面的问题已经解决了,但是我仍然想知道上面的内容是否可行,因为编写一个包装器是很乏味的。

或者,如果我有一个针对这些对象的包装类,并且我想在包装器表示中嵌套它们的HTML表示?

代码语言:javascript
复制
def _repr_html_(self):
    return '<td>%s</td><td></td>' % (self.obj1, self.obj2)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-26 08:14:22

使用from IPython.display import display并对每个或您的对象调用display

票数 11
EN

Stack Overflow用户

发布于 2014-11-26 02:17:44

对于第二种情况,您可以给包装器对象一个_repr_html_,它显式地调用它的子对象上的_repr_html_,并以任何您喜欢的方式组合它们。

我认为不可能使第一个案例工作,因为_repr_html_是一个repr,而不是一个str,当您使用print对象时,使用的是str。即使您尝试只输入obj1, obj2 (没有print),它也不能工作,因为obj1, obj2是元组,而元组已经有自己的repr,您不能覆盖(也不能向元组类型添加_html_repr_ )。

下面是一个简单的例子:

代码语言:javascript
复制
class Foo(object):
    def __init__(self, value):
        self.value = value
    def _repr_html_(self):
        return "<p><em>This is the <strong>{0}</strong> object</em>!</p>".format(self.value)

class Wrapper(object):
    def __init__(self, foo1, foo2):
        self.foo1 = foo1
        self.foo2 = foo2

    def _repr_html_(self):
        return """
        <h3>Foo1</h3>
        {0}
        <h3>Foo2</h3>
        {1}
        """.format(self.foo1._repr_html_(), self.foo2._repr_html_())

有了这些类,执行Foo("Blah")就可以了,创建两个Foo对象并用Wrapper包装它们就可以了。但是,仅仅输入foo1, foo2 (其中那些是Foo对象)将无法工作,原因是我在上面描述过。如果您想要显示多个对象,则必须使用一个具有自己的_repr_html_的包装器类显式地包装它们。(当然,您可以给这个包装类取一个类似HTMLshow之类的短名称,这样您就可以只做show(obj1, obj2)了。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27139896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档