2017-01-23 60 views
1

ipython我可以使用TAB 查看對象的對象:如何顯示對象的對象,如在IPython中

In [1]: import numpy as np 

In [2]: np. 
Display all 590 possibilities? (y or n) 
np.ALLOW_THREADS    np.bartlett     np.errstate     np.isclose     np.nested_iters    np.seterrcall 
np.BUFSIZE     np.base_repr     np.euler_gamma    np.iscomplex     np.newaxis     np.seterrobj 
np.CLIP      np.bench      np.exp      np.iscomplexobj    np.newbuffer     np.setxor1d 
np.ComplexWarning    np.binary_repr    np.exp2      np.isfinite     np.nextafter     np.shape 
np.DataSource     np.bincount     np.expand_dims    np.isfortran     np.nonzero     np.shares_memory 
.... 

有編程的方式來做到這一點的ipython之外?我可以用普通的Python腳本打印這些對象嗎?

回答

5

dir(..)命令可用於獲得對象容納屬性的列表。例如:

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy as np 
>>> dir(np) 
['ALLOW_THREADS', 'BUFSIZE', 'CLIP', 'ComplexWarning', 'DataSource', 'ERR_CALL', 'ERR_DEFAULT', 'ERR_IGNORE', 'ERR_LOG', 'ERR_PRINT', 'ERR_RAISE', 'ERR_WARN', 'FLOATING_POINT_SUPPORT', 'FPE_DIVIDEBYZERO', 'FPE_INVALID', 'FPE_OVERFLOW', 'FPE_UNDERFLOW',..., 'var', 'vdot', 'vectorize', 'version', 'void', 'void0', 'vsplit', 'vstack', 'warnings', 'where', 'who', 'zeros', 'zeros_like'] 

(輸出被剪切,以便於獲取和格式化)。

它返回一個字符串,顯示的是一個對象的列表。請注意,這個函數也可用於Python中的程序:例如,您可以對它進行迭代,篩選特定模式並將這些屬性複製到另一個對象。例如,你可以寫一個copy_fields功能:

def copy_fields(frm,to): 
    for attr in dir(frm): 
     setattr(to,atr,getattr(frm,atr)) 

這裏getattr(..)setattr(..)是給定一個對象(frmto)和屬性(attr)的名稱分別函數獲取和設置該屬性。

我非常相信,這是什麼情況的ipython幕後(或多或少)(雖然可能IPython的目的也是爲了得到這樣的,它可以寫一個括號((類型)的功能等

最後要注意的是,dir(..)不能總是報告所有屬性(因爲有時候屬性可以被函數處理,導致對象具有「虛擬」無限量屬性的事實;例如對於BeautifulSoup中的對象如果該屬性不是標準化的,那麼BeautifulSoup會將其視爲查詢)。幕布後面dir(..)的工作原理如下:

如果對象有一個名爲__dir__()的方法,則此方法將被稱爲 並且必須返回屬性列表。這使得 實現自定義__getattr__()__getattribute__()功能 對象定製dir()報告它們的屬性的方式。

如果對象不提供__dir__(),該函數試圖從對象的__dict__屬性最好 收集信息,如果 定義,並從其類型的對象。結果列表不是 自定義__getattr__(),並且可能不準確。

(source)

3

的標籤視圖顯示上述要求的格式,我不會在這裏做的,但要一個對象的屬性可以通過內置的功能dir(MyObject)來完成。這將返回所有屬性的列表。