如何显示对象';s对象,如ipython中的对象

如何显示对象';s对象,如ipython中的对象,python,ipython,Python,Ipython,在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

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

该命令可用于获取对象所拥有的属性列表。例如:

$ 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))
这里和函数分别给定一个对象(
frm
to
)和一个属性的名称(
attr
)来获取和设置该属性

我很有信心,这是在
ipython
的幕后发生的事情(或多或少)(尽管ipython可能也希望派生类型,以便它可以为函数等编写括号(

最后请注意,
dir(…)
不能总是报告所有属性(因为有时属性可以由函数处理,从而导致对象具有“虚拟”属性无限多的属性;例如,对于
BeautifulSoup
中的对象,如果属性不是标准化的,BeautifulSoup将其视为一个查询)。窗帘后面的
dir(…)
工作如下:

如果对象有一个名为
\uuuu dir\uuu()
的方法,则将调用此方法 并且必须返回属性列表。这允许 实现自定义的
\uuuu getattr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
\uuuuuuuuuu
自定义
dir()
报告属性的方式

如果对象不提供
\uuuu dir\uuuu()
,则函数将尽最大努力 从对象的
\uuuu dict\uuuu
属性收集信息,如果 已定义,并且来自其类型对象。结果列表不是 必须完整,并且当对象具有 自定义
\uuu getattr\uuuu()


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