Я пытаюсь сравнить функцию __class__
в Python и IPython с функцией type()
в обоих и задаюсь вопросом, существует ли ниже разница в поведении из-за модификации __class__
в IPython по Python.
питон
>>> [].__class__
<class 'list'>
>>> type([])
<class 'list'>
IPython
In [2]: [].__class__
Out[2]: list
In [3]: type([])
Out[3]: list
Но с печатью все еще, похоже, ссылается на Python __class__
питон
>>> print(type([]))
<class 'list'>
IPython
In [4]: print(type([]))
<class 'list'>
Здесь, где происходит волшебство:
In [1] import sys
In [2] sys.displayhook
Out[2]: <IPython.terminal.prompts.RichPromptDisplayHook at 0x7f6c42b08190>
против
>>> import sys
>>> sys.displayhook
<built-in function displayhook>
Отображаемый объект (list
или <class 'list'>
) - это тот же объект. Используя sys.displayhook
, IPython изменяет способ отображения в интерактивном REPL.
sys.displayhook
IPython, который изменен:list
прежнему ссылается на<class 'list'>
, он просто печатается по-другому.