如何访问类并获取可用操作的dir()?

时间:2019-01-15 22:33:57

标签: python

我一直在尝试通过re.search访问Match Object的可用功能。我正在寻找一种类似于dir(str)的方法,并且可以找到.replace。

这是我的re()模块的dir()以及我尝试过的一些方法:

std::string

我想进入此菜单而不必创建匹配对象:

>>> import re
>>> m = re.search('x', 'x')
>>> dir(re)
['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 
'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', 
'_MAXCACHE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', 
'__package__', '__version__', '_alphanum', '_cache', '_cache_repl', 
'_compile', '_compile_repl', '_expand', '_locale', '_pattern_type', 
'_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 
'finditer', 'match', 'purge', 'search', 'split', 'sre_compile', 
'sre_parse', 'sub', 'subn', 'sys', 'template']

是否有办法从dir(m)出发,并且能够找出如何提高水平?这样,我可以追溯到模块和功能。就像我要执行dir(re.search.func_dict)一样,如何找到需要输入dir()的内容以获取包含func_dict()的列表?

>>> dir(m)
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__doc__', 
'__format__', '__getattribute__', '__hash__', '__init__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
'__str__', '__subclasshook__', 'end', 'endpos', 'expand', 'group', 
'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 
'span', 'start', 'string']

我看到了有关_sre.SRE._Match的内容,但是我如何找到它的住处,以便获得更多有关它的信息?

>>> dir(re.Match)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Match'

我尝试使用inspect函数,但是唯一提供给我任何信息的函数是inspect.getmembers(re),但这只是很多我不理解的东西。

我是一名完全的新手,学习了您的编程课程,并且除了我编写的某些程序之外,我没有Python的基础知识。我一直在尝试使用dir()和help()进行大量学习。非常感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

这是到目前为止我得到的最接近的东西:

>>> import re, inspect

>>> inspect.getmembers(re,inspect.isclass)
[('Scanner', <class re.Scanner at 0xb7b7bcec>), ('_pattern_type', <type 
'_sre.SRE_Pattern'>), ('error', <class 'sre_constants.error'>)]

>>> from re import _pattern_type

>>> dir(_pattern_type)
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__doc__', '__format__', 
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'findall', 
'finditer', 'flags', 'groupindex', 'groups', 'match', 'pattern', 'scanner', 'search', 
'split', 'sub', 'subn']

答案 1 :(得分:0)

显然_sre是C扩展名,因此SRE_Match在此C文件中定义了

Where can I find the _sre.py python built-in module?

https://hg.python.org/cpython/file/2.7/Modules/_sre.c

答案 2 :(得分:0)

在Python 3.7中,re.Matchre.match返回的对象的类型。参见bpo30397

在以前的版本中,未定义re.Match。如果要引用匹配对象的类型,可以使用

Match = type(re.match('',''))

您可以在dir类型或匹配对象上使用Match来列出其属性和方法。