我非常喜欢如何在IPython笔记本中添加一个名为_repr_html_()的类方法,以打印类的丰富HTML版本。
是否有一种方法可以显式地强制输出,例如,如果我想同时打印两个对象?
print obj1, obj2下面的问题已经解决了,但是我仍然想知道上面的内容是否可行,因为编写一个包装器是很乏味的。
或者,如果我有一个针对这些对象的包装类,并且我想在包装器表示中嵌套它们的HTML表示?
def _repr_html_(self):
return '<td>%s</td><td></td>' % (self.obj1, self.obj2)发布于 2014-11-26 08:14:22
使用from IPython.display import display并对每个或您的对象调用display。
发布于 2014-11-26 02:17:44
对于第二种情况,您可以给包装器对象一个_repr_html_,它显式地调用它的子对象上的_repr_html_,并以任何您喜欢的方式组合它们。
我认为不可能使第一个案例工作,因为_repr_html_是一个repr,而不是一个str,当您使用print对象时,使用的是str。即使您尝试只输入obj1, obj2 (没有print),它也不能工作,因为obj1, obj2是元组,而元组已经有自己的repr,您不能覆盖(也不能向元组类型添加_html_repr_ )。
下面是一个简单的例子:
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_的包装器类显式地包装它们。(当然,您可以给这个包装类取一个类似HTML或show之类的短名称,这样您就可以只做show(obj1, obj2)了。)
https://stackoverflow.com/questions/27139896
复制相似问题