On 5/13/2015 9:25 AM, andrew cooke wrote:

The following code worked on Python 3.2, but no longer works in 3.4.

Bugfixes break code that depends on buggy behavior. See
https://bugs.python.org/issue1683368
Your code also fails in 2.7.9 if you inherit Foo from object.
The exact error messages changed for 3.4 in
https://bugs.python.org/issue7963

> Did something change,

Obviously yes.

> or have I always been doing something dumb?

You were depending on behavior of object that Guido decided was buggy.

I found the tracker issue by looking for 'object' in the Core and Builtins sections of the changelog one can access from What's New, first paragraph (using Highlight All in Firefox).

class Foo:
...     def __new__(cls, *args, **kargs):
...         print('new', args, kargs)
...         super().__new__(cls, *args, **kargs)
...
class Bar(Foo):
...     def __init__(self, a):
...         print('init', a)
...
Bar(1)
new (1,) {}
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 4, in __new__
TypeError: object() takes no parameters

What I was expecting to happen (and what happens in 3.2) is that the 
object.__new__ method passes the argument to the __init__ of the subclass.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to