1234567891011121314151617181920212223242526272829303132333435363738 |
- ################################################################################
- ### Simple tests
- ################################################################################
- # verify that instances can be pickled
- from collections import namedtuple
- from pickle import loads, dumps
- Point = namedtuple('Point', 'x, y', True)
- p = Point(x=10, y=20)
- assert p == loads(dumps(p))
- # 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/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))
- print(Point(11, 22)._replace(x=100))
- Point3D = namedtuple('Point3D', Point._fields + ('z',))
- print(Point3D.__doc__)
- import doctest, collections
- TestResults = namedtuple('TestResults', 'failed attempted')
- print(TestResults(*doctest.testmod(collections)))
|