Interesting article. The author asks "So, is the namedfields decorator better than the namedtuple factory function?"<p>I have another observation. I like namedtuple as a quick-and-dirty class constructor when there are many parameters, as otherwise all of the __init__(self, x, ..) : self.x = x statements get tedious. (Some people have an editor macro for this, but I don't.)<p>As soon as that object is part of the external API, I have to rewrite it as a regular class, because namedtuple has getitem lookup, and I don't want obj[2] to be part of the public API that I need to maintain forever.<p>There are times when attribute and index lookup is appropriate. RGB and XYZ values, and of course things like os.stat(), where there was a tuple but where attribute use is better.<p>I therefore like the idea of<p><pre><code> @namedfields("spam eggs ham")
class Viking:
pass
</code></pre>
where the [0], [1], and [2] aren't built-in.