一尘不染

如何获得对象的方法和属性的完整列表?

python

dir(re.compile(pattern))

不返回pattern作为列表的元素之一。即它返回:

['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn']

根据手册,它应该包含

对象的属性名称,其类的属性名称,以及递归其类的基类的属性。

它也说

该列表不一定完整。

有没有办法获得 完整的 清单?我一直以为dir返回一个完整的列表,但显然并没有…

另外:有没有办法只列出属性?还是只有方法?

编辑:这实际上是python中的错误- >据称它已在3.0分支中修复(也许在2.6中已修复)


阅读 166

收藏
2021-01-20

共1个答案

一尘不染

对于属性的 完整
列表,简短的答案是:否。问题在于属性实际上定义为getattr内置函数接受的参数。由于用户可以重新实现__getattr__,突然允许任何类型的属性,因此没有可能的通用方法来生成该列表。该dir函数返回__dict__属性中的键,即,如果__getattr__未重新实现该方法,则所有可访问的属性。

对于第二个问题,这没有任何意义。实际上,方法是可调用的属性,仅此而已。但是,您可以过滤可调用的属性,并使用该inspect模块确定类的方法,方法或函数。

2021-01-20