如何在ipython中显示对象的对象

时间:2017-01-23 17:44:39

标签: python ipython

ipython我可以使用 TAB 查看对象的对象:

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脚本中打印这些对象吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:3)

上面显示的选项卡视图将需要格式化,我不会在这里进行格式化,但是可以使用dir(MyObject)内置函数来获取对象的属性。这将返回所有属性的列表。