如何在Python中子类化MatchObject?

3 投票
2 回答
842 浏览
提问于 2025-04-16 10:49

我最近在玩正则表达式,想要对从re.search返回的MatchObject进行子类化。

但是我一直没能成功访问到MatchObject这个类。

我猜这个对象的实际类型并不是叫“MatchObject”:

>>> re.search ("a", "a")
<_sre.SRE_Match object at 0x100427a58>

不过,我还是无法访问到这个对象:

import _sre

dir (_sre)
['CODESIZE', 'MAGIC', '__doc__', '__name__', '__package__', 'compile', 'copyright', 'getcodesize', 'getlower']

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

我到底漏掉了什么呢?

2 个回答

0

这个类可以通过 _sre._SRE_Match 来访问。别问我为什么。

2

这事儿是没戏了 :)

>>> import re
>>> mo = re.search ("a", "a")
>>> mo_class = type(mo)
>>> mo_class
<type '_sre.SRE_Match'>
>>> class SubClass(mo_class):
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
    type '_sre.SRE_Match' is not an acceptable base type

不过值得一提的是,你总是可以通过调用 type(obj) 来获取一个对象的类型。

撰写回答