Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IPython _repr_html__Python_Ipython Notebook - Fatal编程技术网

IPython _repr_html_

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

我真的很喜欢在IPython笔记本中添加一个名为
\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>输出。谢谢!我仍然想知道如何做第一部分,因为每次编写包装似乎都有点乏味。