IPython _repr_html_
我真的很喜欢在IPython笔记本中添加一个名为IPython _repr_html_,python,ipython-notebook,Python,Ipython Notebook,我真的很喜欢在IPython笔记本中添加一个名为\u repr\u html\u()的类方法来打印类的丰富html版本 有没有一种方法可以显式地强制这个输出,比如说如果我想同时打印两个对象 print obj1, obj2 下面的问题已经解决了,但我仍然想知道上面的问题是否可行,因为编写包装有点乏味 或者,如果我有一个用于这些对象的包装器类,并且我想将它们的HTML表示嵌套在包装器表示中 def _repr_html_(self): return '<td>%s</t
\u repr\u html\u()的类方法来打印类的丰富html版本
有没有一种方法可以显式地强制这个输出,比如说如果我想同时打印两个对象
print obj1, obj2
下面的问题已经解决了,但我仍然想知道上面的问题是否可行,因为编写包装有点乏味
或者,如果我有一个用于这些对象的包装器类,并且我想将它们的HTML表示嵌套在包装器表示中
def _repr_html_(self):
return '<td>%s</td><td></td>' % (self.obj1, self.obj2)
def_repr_html_(self):
返回“%s%”(self.obj1,self.obj2)
对于第二种情况,您可以给包装器对象一个\u repr\u html\u
,它显式地调用其子对象上的\u repr\u html\u
,并以您喜欢的任何方式组合它们
我认为第一个案例不可能奏效,因为\u repr\u html
是repr
,而不是str
,并且str
在打印对象时使用。即使您尝试只输入obj1,obj2
(没有打印
),它也不会工作,因为obj1,obj2
是一个元组,元组已经有了自己的repr
,您不能覆盖(也不能向元组类型添加\u html\u 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(对象):
定义初始值(自身,值):
自我价值=价值
定义报告html(自我):
返回“这是{0}对象!”格式(self.value)
类包装器(对象):
定义初始化(self,foo1,foo2):
self.foo1=foo1
self.foo2=foo2
定义报告html(自我):
返回“”
Foo1
{0}
食物2
{1}
“.”格式(self.foo1.\u repr\u html.\u0(),self.foo2.\u repr\u html.\u0())
在这些类中,执行Foo(“Blah”)
将起作用,创建两个Foo
对象并使用包装器将其包装将起作用。但是仅仅输入foo1,foo2
(它们是Foo对象)是不起作用的,原因我在上面已经描述过了。如果你想用HTML显示多个对象,你必须用一个有自己的\u repr\u HTML
的包装类显式地包装它们。(当然,您可以给这个包装类一个简短的名称,比如HTML
或show
或其他什么,这样您就可以对每个对象执行show(obj1,obj2)
)使用IPython的。display import display
并调用display
。对于第二种情况,我想您可以让包装器对象通过显式执行类似于“%s%s%”(self.obj1.\u repr\u html(),self.obj2.\u repr\u html())的操作来连接子对象的\u repr\u html\ucode>输出。谢谢!我仍然想知道如何做第一部分,因为每次编写包装似乎都有点乏味。