Le Fri, 12 Jun 2009 09:05:35 -0400, Kent Johnson <ken...@tds.net> s'exprima ainsi:
> On Fri, Jun 12, 2009 at 8:37 AM, Lie Ryan<lie.1...@gmail.com> wrote: > >>>> class Normal(object): > > ... def __new__(cls, arg): > > ... if arg: > > ... return Special(arg) > > ... else: > > ... ret = super(Normal, cls).__new__(cls) > > ... ret.__init__(arg) > > ... return ret > > I think the else case should be > ret = super(Normal, cls).__new__(cls, arg) > return ret > > i.e. pass the same args to super.__new__() and don't explicitly call > __init__(). > > Kent Holà, Kent, Don't you have a comment in the 'if' case, too? Namely that __init__ is not invoked explicitely, while the docs clearly state: << f __new__() returns an instance of cls, then the new instance’s __init__() method will be invoked like __init__(self[, ...]), where self is the new instance and the remaining arguments are the same as were passed to __new__(). If __new__() does not return an instance of cls, then the new instance’s __init__() method will not be invoked.>> Denis ------ la vita e estrany _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor