On Wednesday, 13 May 2015 11:56:21 UTC-3, Ian wrote: > On Wed, May 13, 2015 at 8:45 AM, andrew cooke <and...@acooke.org> wrote: > >>>> class Foo: > > ... def __new__(cls, *args, **kargs): > > ... print('new', args, kargs) > > ... super().__new__(cls) > > ... > >>>> class Bar(Foo): > > ... def __init__(self, a): > > ... print('init', a) > > ... > >>>> Bar(1) > > new (1,) {} > > > > no "init" is printed. > > You're not returning anything from Foo.__new__, so the result of the > constructor is None. None.__init__ does nothing.
ah, you're right, thanks. that was a typo. more generally, it seems that the error is: (1) __new__ is called and then __init__ from some other, external code (2) in 3.2 anything passed to object's __new__ was silently discarded. the following code works in 3.2 and 3.4: class Foo: def __new__(cls, *args, **kargs): print("new", args, kargs) return super().__new__(cls) class Bar(Foo): def __init__(self, *args, **kargs): print("init", args, kargs) Bar(1) (while my original code didn't). thanks everyone, andrew -- https://mail.python.org/mailman/listinfo/python-list