[Python-Dev] Rationale for different signatures of tuple.__new__ and namedtuple.__new__

John Reid j.reid at mail.cryst.bbk.ac.uk
Mon Feb 18 15:32:26 CET 2013


I can do


but not:

from collections import namedtuple
namedtuple('B', 'x y z')([1,2,3])

I get a TypeError: __new__() takes exactly 4 arguments (2 given)
However I can do:

namedtuple('B', 'x y z')._make([1,2,3])

So namedtuple's _make classmethod looks a lot like tuple's __new__().
What's the rationale for this? Wouldn't it be better to share the same
signature for __new__?

IPython's serialization code depends on a tuple's __new__() having the
signature that tuple has and therefore does not work with namedtuples.
See discussion here:


More information about the Python-Dev mailing list