Tobias Weber wrote: > how do I subclass or at least add a method to something returned by > re.compile()?
Let's see: >>> import re >>> r = re.compile("yadda") >>> class S(type(r)): pass ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Error when calling the metaclass bases type '_sre.SRE_Pattern' is not an acceptable base type So I'm afraid you can't subclass... >>> def hello(self): print "hello" ... >>> type(r).hello = hello Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't set attributes of built-in/extension type '_sre.SRE_Pattern' >>> r.hello = hello Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: '_sre.SRE_Pattern' object has no attribute 'hello' ...nor add a method... >>> class W(object): ... def __init__(self, match): ... self._match = match ... def __getattr__(self, name): ... return getattr(self._match, name) ... hello = hello ... >>> def my_compile(*args, **kw): ... m = original_compile(*args, **kw) ... if m is not None: ... return W(m) ... >>> original_compile = re.compile >>> re.compile = my_compile >>> re.compile("yadda").hello() hello ...but alter the meaning of "something returned by re.compile()" you can. Now who would want to do that? And why? Peter -- http://mail.python.org/mailman/listinfo/python-list