mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			39 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								################################################################################
							 | 
						||
| 
								 | 
							
								### 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)))
							 |