python - named tuple example
Relevancia de typename en namedtuple (2)
''whatsmypurpose''
le da a la nueva subclase el nombre de su tipo. De la documentación:
collections.namedtuple ( nombre de tipo , field_names, verbose = False, rename = False)
Devuelve una nueva subclase de tupla llamada typename .
Aquí hay un ejemplo:
>>> from collections import namedtuple
>>> Foo = namedtuple(''Foo'', [''a'', ''b''])
>>> type(Foo)
<class ''type''>
>>> a = Foo(a = 1, b = 2)
>>> a
Foo(a=1, b=2)
>>> Foo = namedtuple(''whatsmypurpose'', [''a'', ''b''])
>>> a = Foo(a = 1, b = 2)
>>> a
whatsmypurpose(a=1, b=2)
>>>
Establezca el parámetro verbose
en True
y puede whatsmypurpose
la definición completa de la clase whatsmypurpose
.
>>> Foo = namedtuple(''whatsmypurpose'', [''a'', ''b''], verbose=True)
from builtins import property as _property, tuple as _tuple
from operator import itemgetter as _itemgetter
from collections import OrderedDict
class whatsmypurpose(tuple):
''whatsmypurpose(a, b)''
__slots__ = ()
_fields = (''a'', ''b'')
def __new__(_cls, a, b):
''Create new instance of whatsmypurpose(a, b)''
return _tuple.__new__(_cls, (a, b))
@classmethod
def _make(cls, iterable, new=tuple.__new__, len=len):
''Make a new whatsmypurpose object from a sequence or iterable''
result = new(cls, iterable)
if len(result) != 2:
raise TypeError(''Expected 2 arguments, got %d'' % len(result))
return result
def _replace(_self, **kwds):
''Return a new whatsmypurpose object replacing specified fields with new values''
result = _self._make(map(kwds.pop, (''a'', ''b''), _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__ + ''(a=%r, b=%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)
a = _property(_itemgetter(0), doc=''Alias for field number 0'')
b = _property(_itemgetter(1), doc=''Alias for field number 1'')
from collections import namedtuple
Point=namedtupe(''whatsmypurpose'',[''x'',''y''])
p=Point(11,22)
print(p)
Salida:
whatsmypurpose(x=11,y=22)
¿Cuál es la relevancia / uso de ''whatsmypurpose''
?
namedtuple()
es una función de fábrica para las subclases de tuple
. Aquí, ''whatsmypurpose''
es el nombre de tipo. Cuando creas una tupla con nombre, una clase con este nombre ( whatsmypurpose
) se crea internamente.
Puedes notar esto usando el argumento detallado como:
Point=namedtuple(''whatsmypurpose'',[''x'',''y''], verbose=True)
También puedes probar type(p)
para verificar esto.