如何在Python中子类化MatchObject?
我最近在玩正则表达式,想要对从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)
来获取一个对象的类型。