Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
namedtuple definition
from builtins import property as _property, tuple as _tuple
from operator import itemgetter as _itemgetter
from collections import OrderedDict
class point(tuple):
'point(x, y, z)'
__slots__ = ()
_fields = ('x', 'y', 'z')
def __new__(_cls, x, y, z):
'Create new instance of point(x, y, z)'
return _tuple.__new__(_cls, (x, y, z))
@classmethod
def _make(cls, iterable, new=tuple.__new__, len=len):
'Make a new point object from a sequence or iterable'
result = new(cls, iterable)
if len(result) != 3:
raise TypeError('Expected 3 arguments, got %d' % len(result))
return result
def _replace(_self, **kwds):
'Return a new point object replacing specified fields with new values'
result = _self._make(map(kwds.pop, ('x', 'y', 'z'), _self))
if kwds:
raise ValueError('Got unexpected field names: %r' % list(kwds))
return result
def __repr__(self):
'Return a nicely formatted representation string'
return self.__class__.__name__ + '(x=%r, y=%r, z=%r)' % self
def _asdict(self):
'Return a new OrderedDict which maps field names to their values.'
return OrderedDict(zip(self._fields, self))
def __getnewargs__(self):
'Return self as a plain tuple. Used by copy and pickle.'
return tuple(self)
x = _property(_itemgetter(0), doc='Alias for field number 0')
y = _property(_itemgetter(1), doc='Alias for field number 1')
z = _property(_itemgetter(2), doc='Alias for field number 2')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.