Ipython 如何使用%edit magic打印我定义的对象的源代码

Ipython 如何使用%edit magic打印我定义的对象的源代码,ipython,Ipython,Ipython 0.13.1可以打印python库中对象的源代码, 例如,os.path.abspath??? 但我无法打印通过ipython中的%ed magic定义的任何对象的源代码, 我做错什么了吗? 例如,我通过%ed magic定义了一个类名: %ed 然后 class Name(object): """docstring for Name""" name = 'hong' def __init__(self, arg): super(Na

Ipython 0.13.1可以打印python库中对象的源代码,
例如,os.path.abspath???
但我无法打印通过ipython中的%ed magic定义的任何对象的源代码,
我做错什么了吗?
例如,我通过%ed magic定义了一个类名:

%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时,我看不到类名的源代码:

In [59]: Name??
Type:       type
String Form:<class '__main__.Name'>
Docstring:  docstring for Name
Constructor information:
Definition:Name(self, arg)
[59]中的
:名称??
类型:类型
字符串形式:
Docstring:Name的Docstring
建造商资料:
定义:名称(self,arg)
这是IPython的bug吗?

--OP提到这一点后的编辑在IPython iteself中可以看到

键入%ed myfunc后是否收到任何错误消息?粘贴可以帮助其他人发现问题

---更新:

当我尝试Name???,但Name.pri???时,我也会得到一个简短版本的源代码??提供Name类的pri()成员函数的完整源代码。所以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]中的
:名称??
类型:类型
字符串形式:
Docstring:Name的Docstring
建造商资料:
定义:名称(self,arg)
在[3]:Name.pri??
类型:instancemethod
字符串形式:
文件:/tmp/ipython\u edit\u 8YOfN9.py
定义:Name.pri()
资料来源:
def pri():
打印“类名”
在[4]中:

IPython的最新版本(不确定确切版本号)确实显示了源代码:

IPython 0.13 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's 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
ipython0.13——一种增强的交互式Python。
?         -> 介绍和概述IPython的功能。
%快速参考->快速参考。
帮助->Python自己的帮助系统。
对象?->有关“对象”的详细信息,请使用“对象??”获取更多详细信息。
在[1]中:%ed
IPython将创建一个名为:/var/folders/88/zgy_z51x1fn2mp_7vmkj3phm0000gn/T/IPython_edit_g9xYY4.py的临时文件
编辑。。。完成。正在执行已编辑的代码。。。
输出[1]:'def f(a):\n\t返回a+3\n'
In[2]:f(4)
Out[2]:7
在[3]:f??
类型:功能
字符串形式:
文件:/var/folders/88/zgy_z51x1fn2mp_7vmkj3ph0000gn/T/ipython_edit_g9xYY4.py
定义:f(a)
资料来源:
定义f(a):
返回a+3

还有两种方法可以获取源代码。一个是,如果您可以返回调用
%ed
的行,返回值应该是源代码(这里是
Out[1]
,因此您可以执行
打印[1]
)。另一种方法是调用
%ed f
-这应该是将
f
的当前定义加载到编辑器中,并允许您编辑定义。

不使用笔记本,我只使用IPython shell,我是指IPython shellah中的问题,抱歉疏忽。我现在修改了答案,寻找可能有助于其他人解决问题的错误消息。函数定义,例如您的
def(a):返回a+3,我也没有问题。你能定义一个类对象来尝试一下吗。我的IPython是v0.13.1。谢谢,我明白了。有趣。是的,也许IPython没有打印类的源代码,但不幸的是,它也不允许您
%ed
它……我也找到了它。但是您可以通过%ed类的函数来%ed整个类,例如我在上面的问题上定义的%ed Name.pri。