2012-12-17 21 views
11

Ipython 0.13.1可以打印來自python庫的對象的源碼,
如os.path.abspath?
但我無法打印通過ipython通過%ed魔法定義的任何對象的源代碼,
我做了什麼錯誤?
如 ,我定義一個類名稱通過%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的,也看不出類名稱的源代碼:

In [59]: Name?? 
Type:  type 
String Form:<class '__main__.Name'> 
Docstring: docstring for Name 
Constructor information: 
Definition:Name(self, arg) 

這是IPython的bug嗎?

回答

10

- OP後提到的編輯這是在ipython iteself中看到的。

打印%ed myfunc後是否有任何錯誤消息?粘貼可能會幫助其他人找到問題。

---更新:

我也得到了源代碼的短版,當我嘗試名稱??,但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]: 
+0

不使用筆記本,我只使用IPython shell,而我的意思是IPython shell –

+0

的問題啊,對於疏忽感到抱歉。我現在修改了答案,尋找可能有助於他人解決問題的錯誤消息。 –

+0

謝謝,我已經重新編輯它。 –

3

最近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 

還有其他兩種方式來獲得資源。一種是,如果你可以回到你稱爲%ed的行,返回值應該是源代碼(在這裏,這是Out[1],所以你可以做print Out[1])。另一種方法是調用%ed f - 這應該會將f的當前定義加載到編輯器中,並允許您編輯定義。

+0

函數定義,如你的'def f(a):return a + 3',我也沒有問題。你能否定義一個類對象來嘗試一下。我的IPython是v0.13.1。謝謝 –

+0

哦,我明白了。有趣。是的,也許IPython不會打印類的源代碼,但不幸的是,它不會讓你編寫它...。 – illya

+0

我也找到了。但是你可以通過%ed類的函數%ed編寫整個類,比如我在上面的問題中定義的%ed Name.pri。 –

相關問題