为什么IPython显示`super`对象与常规Python交互式解释器不同?

时间:2014-02-03 15:50:56

标签: ipython

当我创建未绑定的super对象时,IPython会将其显示为<super: None, None>。然而,str(...)repr(...)以及交互式普通Python解释器都将其显示为<super: <class 'object'>, NULL>,这提供了更多信息。我知道IPythons displayhookdefault Python displayhook不同,但这种差异是否解释了不同的表述? IPython从哪里获取内置对象的显示?

ipython3

In [1]: super(object)
Out[1]: <super: None, None>

In [2]: str(_1), repr(_1)
Out[2]: ("<super: <class 'object'>, NULL>", "<super: <class 'object'>, NULL>")

python3.3

>>> super(object)
<super: <class 'object'>, NULL>
>>> from IPython.core import displayhook, interactiveshell
>>> print(displayhook.DisplayHook(interactiveshell.InteractiveShell()).compute_format_data(super(object)))
WARNING: IPython History requires SQLite, your history will not be saved
({'text/plain': '<super: None, None>'}, {})

发生了什么事?

1 个答案:

答案 0 :(得分:2)

好好发现,谢谢。这是IPython中的一个错误,我刚刚修改了this pull request

IPython计算IPython.lib.pretty中许多内置类型的表示。这对于编译的正则表达式模式很有用,其中默认的repr只是<_sre.SRE_Pattern object at 0x7f...