Подтвердить что ты не робот

Как печатать исходный код объекта Я определил использование% 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?

4b9b3361

Ответ 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 в редактор и позволить вам редактировать определение.