On Fri, Jun 12, 2009 at 9:48 AM, spir<denis.s...@free.fr> wrote:
> Right, thank you. I continued my trials and ended with seemingly working 
> code, close to yours.
>
>                # case pattern is Klass: yield String instead
>                if isinstance(pattern,Klass):
>                        self = String(pattern, numMin,numMax, expression,name)
> #~                      self.__init__(pattern, numMin,numMax, expression,name)
>                        return self
>                # else a Repetition
>                self = Pattern.__new__(cls,pattern, numMin,numMax, 
> expression,name)
>                return self
>
> I have more questions:

> 2. For the special case, as you can see the __init__ line is commented out 
> and it works anyway. While the docs positively assert that __init__ *won't* 
> be called if an object of a different type is returned, it is anyway.

When you call String(...) you invoke String.__new__() and
String.__init__(), so String.__init__() is not called by the normal
mechanism.

If your special case returned for example a cached instance of
String(), then String.__init__() would not be called as part of the
invocation of your __new__().

Kent
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to