<p dir="ltr"><br>
On 22 Nov 2013 09:02, "Victor Stinner" <<a href="mailto:victor.stinner@gmail.com">victor.stinner@gmail.com</a>> wrote:<br>
><br>
> 2013/11/21 Nick Coghlan <<a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>>:<br>
> > Huzzah! Thanks to you both for getting this ready for inclusion :)<br>
><br>
> I now hope that someone will use it :-)<br>
><br>
><br>
> By the way, collections.namedtuple has a private _source attribute.<br>
> This attributes uses something like 676.2 kB in the Python test suite,<br>
> it the 5th biggest user of memory.<br>
><br>
> Woud you mind if I simply remove it?<br>
><br>
> I'm asking because this *private* attribute is documented, which is<br>
> surprising for something private. I don't understand the use case. Is<br>
> it to debug the implementation of the namedtuple? Or I imagined a<br>
> different usecase: dump the _source into a file to speedup the startup<br>
> time. But this optimization is not used in CPython whereas we care of<br>
> the startup time.</p>
<p dir="ltr">namedtuple deviates from normal naming conventions to avoid name clashes between field names and the attributes and methods of the object itself (this is covered in the docs for namedtuple).</p>
<p dir="ltr">Skipping saving _source under -OO would probably be a good thing, but otherwise it's a public API with the usual backwards compatibility guarantees.</p>
<p dir="ltr">Cheers,<br>
Nick.<br></p>
<p dir="ltr">><br>
> Can maybe Raymond explain the use case for this attribute?<br>
><br>
> If there is a real use case, I would prefer a real function to get the<br>
> source code of a function defining a new namedtuple type.<br>
><br>
> I already opened an issue for that:<br>
> <a href="http://bugs.python.org/issue19640">http://bugs.python.org/issue19640</a><br>
><br>
> --<br>
><br>
> The implementation of namedtuple constructor ("factory" ?) looks<br>
> inefficient. Why do we need to build source code to then parse the<br>
> code source? Why not having a base namedtuple class and then inherit<br>
> from this class? It may reduce the memory footprint, allow to check if<br>
> a type is namedtuple, etc.<br>
><br>
> There are two different concerns, I prefer to only focus on the<br>
> removal of the _source attribute. But it's also to say the the _source<br>
> attribute is very specific to the current (inefficient?) implement of<br>
> the namedtuple constructor.<br>
><br>
> Victor<br>
</p>