Как печатать исходный код объекта Я определил использование% edit magic
Ipython 0.13.1 может печатать источник объекта из библиотеки python,
например, os.path.abspath?
Но я не могу напечатать исходный код любого объекта, который я определил с помощью магии% ed в ipython,
Что-то не так?
например, я определяю имя класса через магию% ed:
%ed
то
class Name(object):
"""docstring for Name"""
name = 'hong'
def __init__(self, arg):
super(Name, self).__init__()
self.arg = arg
def pri():
print 'class Name'
когда вернусь к ipython, я не вижу исходного кода класса Name:
In [59]: Name??
Type: type
String Form:<class '__main__.Name'>
Docstring: docstring for Name
Constructor information:
Definition:Name(self, arg)
Является ли это ошибкой IPython?
Ответы
Ответ 1
- Редактирует после OP, упомянутого, что это видно на ipython.
Есть ли сообщение об ошибке, появившееся после типизации% ed myfunc? Вставка, которая может помочь другим найти проблему.
--- обновление:
Я также получаю короткую версию исходного кода, когда я пытаюсь Name?, но Name.pri?? дает мне полный исходный код функции pri() члена класса Name. Таким образом, ipython может иметь какое-то соглашение, чтобы не давать полный исходный код классов.
Вот мое взаимодействие:
In [2]: Name??
Type: type
String Form:<class '__main__.Name'>
Docstring: docstring for Name
Constructor information:
Definition:Name(self, arg)
In [3]: Name.pri??
Type: instancemethod
String Form:<unbound method Name.pri>
File: /tmp/ipython_edit_8YOfN9.py
Definition: Name.pri()
Source:
def pri():
print 'class Name'
In [4]:
Ответ 2
Последние версии IPython (не уверенные в точном номере версии) действительно показывают источник:
IPython 0.13 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython features.
%quickref -> Quick reference.
help -> Python own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: %ed
IPython will make a temporary file named: /var/folders/88/zgy_z51x1fn2mp_7vmkj3phm0000gn/T/ipython_edit_g9xYY4.py
Editing... done. Executing edited code...
Out[1]: 'def f(a):\n\treturn a + 3\n'
In [2]: f(4)
Out[2]: 7
In [3]: f??
Type: function
String Form:<function f at 0x18ddb30>
File: /var/folders/88/zgy_z51x1fn2mp_7vmkj3phm0000gn/T/ipython_edit_g9xYY4.py
Definition: f(a)
Source:
def f(a):
return a + 3
Есть два способа получить источник. Один из них заключается в том, что если вы можете вернуться к строке, где вы назвали %ed
, возвращаемое значение должно быть исходным кодом (здесь это Out[1]
, поэтому вы можете сделать print Out[1]
). Другим является вызов %ed f
- это должно загрузить текущее определение f
в редактор и позволить вам редактировать определение.