classification
Title: Point class may be not be a good example for namedtuple
Type: Stage: resolved
Components: Documentation Versions: Python 3.2, Python 3.3, Python 3.4, Python 2.7
process
Status: closed Resolution: works for me
Dependencies: Superseder:
Assigned To: rhettinger Nosy List: asvetlov, docs@python, eric.araujo, jackdied, julien.tayon, rhettinger, terry.reedy
Priority: low Keywords:

Created on 2012-12-12 17:39 by julien.tayon, last changed 2012-12-15 19:59 by terry.reedy. This issue is now closed.

Messages (4)
msg177382 - (view) Author: julien tayon (julien.tayon) Date: 2012-12-12 17:39
Priority: low
Keywords: documentation

After watching 
http://www.youtube.com/watch?v=o9pEzgHorH0 (Stop writing classes by diedrich)
I think the class Point example for the named tuples may be a wrong practice: 
http://docs.python.org/2/library/collections.html#collections.namedtuple

Since complex basic types

1*  does the same, (if x is real and y is imag)
2*  does more (rotation, norms,  symbolic notation with i)

At my opnion pointing some code to http://bugs.python.org/issue1818 (if it is accepted) may be the case of use of the named tuple.
msg177394 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2012-12-12 23:55
I like the current example.  It does a great job teaching people how namedtuples work.  Also, I think you've drawn the wrong conclusions from Jack's talk.
msg177415 - (view) Author: Andrew Svetlov (asvetlov) * (Python committer) Date: 2012-12-13 16:38
+1 for leaving the doc as is
msg177555 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2012-12-15 19:59
[Raymond, I am assuming that you only left this open for additional comments, possibly more favorable than yours. If I am wrong, reopen.]

I have not read the namedtuple doc before. I did so now and think the Point example is fine for the purpose of explaining namedtuples and should be left as is. It is clear to me and should be for anyone.

For instance, it naturally leads to this example.

"Subclassing is not useful for adding new, stored fields. Instead, simply create a new named tuple type from the _fields attribute:

>>> Point3D = namedtuple('Point3D', Point._fields + ('z',))"

While I do not consider the issue of 'practice' to be entirely relevant here, I note that complex numbers only work for 2-d points while tuples work for other dimensions, as the above shows. Tuples can be easily multiplied by a transformation matrix of the same dimension through indexing. The namedtuple factory just creates a friendly facade for what is still basically a tuple. "Named tuple instances do not have per-instance dictionaries, so they are lightweight and require no more memory than regular tuples." Anyway, serious numerical work is more likely to use numpy arrays or something similar.
History
Date User Action Args
2012-12-15 19:59:28terry.reedysetstatus: open -> closed

nosy: + terry.reedy
messages: + msg177555

resolution: works for me
stage: resolved
2012-12-13 16:38:54asvetlovsetnosy: + asvetlov
messages: + msg177415
2012-12-13 16:37:15eric.araujosetnosy: + eric.araujo
title: [docs] class Point in collections.namedtuples may be not that good example -> Point class may be not be a good example for namedtuple

versions: + Python 3.4, - Python 2.6, Python 3.1
2012-12-12 23:55:22rhettingersetpriority: normal -> low

nosy: + rhettinger, jackdied
messages: + msg177394

assignee: docs@python -> rhettinger
2012-12-12 17:39:54julien.tayoncreate