在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脚本中打印这些对象吗?
该 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(..)
是给定对象(frm
和to
)和属性(attr
)的名称分别获取和设置该属性的函数.
我非常有信心这就是幕后所发生的事情(或多或少)ipython
(虽然可能ipython的目的是推导出类型,以便它可以(
为函数等编写一个括号().
最后要注意的是,dir(..)
不能总是报告所有属性(因为有时候属性可以由函数处理,导致对象"实际上"具有无限量的属性;例如,对象的情况就是在BeautifulSoup
哪里,如果属性不是标准化的,BeautifulSoup将其视为一个查询).窗帘后面的dir(..)
工作原理如下:
如果对象具有名为的
__dir__()
方法,则将调用此方法,并且必须返回属性列表.这允许实现自定义__getattr__()
或__getattribute__()
函数的对象自定义dir()
报告其属性的方式.如果对象未提供
__dir__()
,则该函数会尽力从对象的__dict__
属性(如果已定义)和其类型对象中收集信息.结果列表不一定完整,并且在对象具有自定义时可能不准确__getattr__()
.
(资源)