]> granicus.if.org Git - python/commitdiff
Examples for named tuple subclassing should include __slots__
authorRaymond Hettinger <python@rcn.com>
Thu, 10 Jan 2008 19:15:10 +0000 (19:15 +0000)
committerRaymond Hettinger <python@rcn.com>
Thu, 10 Jan 2008 19:15:10 +0000 (19:15 +0000)
Doc/library/collections.rst
Lib/collections.py

index c3839433cbb34da198d27c1c221cde451e5d7be8..b276ab02d9ce931aab7a1ce6f61e77de9e7971e3 100644 (file)
@@ -513,23 +513,24 @@ functionality with a subclass.  Here is how to add a calculated field and
 a fixed-width print format::
 
     >>> class Point(namedtuple('Point', 'x y')):
+    ...     __slots__ = ()
     ...     @property
     ...     def hypot(self):
     ...         return (self.x ** 2 + self.y ** 2) ** 0.5
     ...     def __str__(self):
     ...         return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot)
 
-    >>> for p in Point(3,4), Point(14,5), Point(9./7,6):
+    >>> for p in Point(3, 4), Point(14, 5/7.):
     ...     print p
 
     Point: x= 3.000 y= 4.000 hypot= 5.000
-    Point: x=14.000 y= 5.000 hypot=14.866
-    Point: x= 1.286 y= 6.000 hypot= 6.136
+    Point: x=14.000 y= 0.714 hypot=14.018
 
 Another use for subclassing is to replace performance critcal methods with
 faster versions that bypass error-checking and that localize variable access::
 
     class Point(namedtuple('Point', 'x y')):
+        __slots__ = ()
         _make = classmethod(tuple.__new__)
         def _replace(self, _map=map, **kwds):
             return self._make(_map(kwds.get, ('x', 'y'), self))
index a234b44902c088b29e615721735a2129963a26e6..47b0397d0b89cc52e0a107d9948b2ccae8f4e1df 100644 (file)
@@ -118,17 +118,19 @@ if __name__ == '__main__':
 
     # test and demonstrate ability to override methods
     class Point(namedtuple('Point', 'x y')):
+        __slots__ = ()
         @property
         def hypot(self):
             return (self.x ** 2 + self.y ** 2) ** 0.5
         def __str__(self):
             return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot)
 
-    for p in Point(3,4), Point(14,5), Point(9./7,6):
+    for p in Point(3, 4), Point(14, 5/7.):
         print p
 
     class Point(namedtuple('Point', 'x y')):
         'Point class with optimized _make() and _replace() without error-checking'
+        __slots__ = ()
         _make = classmethod(tuple.__new__)
         def _replace(self, _map=map, **kwds):
             return self._make(_map(kwds.get, ('x', 'y'), self))