Disseny d'una classe contenidora ================================ * Conté molts elements d'un mateix tipus (o no, si és una classe genèrica). * Diverses classe predefinides de python són contenidores: :py:class:`str`, :py:class:`list`, :py:class:`tuple`, :py:class:`dict`. * Té algun atribut on emmagatzema els elements. Sovint és privat. * Solen tenir accés per índex i ser iterables. Mètodes especials ----------------- ============================ ============== ============================================= Mètode especial Crida a Significat ============================ ============== ============================================= ``__getitem__(self, i)`` ``obj[i]`` Consulta un element per índex ---------------------------- -------------- --------------------------------------------- ``__setitem__(self, i, v)`` ``obj[i] = v`` Assigna un valor a un element d'un índex ---------------------------- -------------- --------------------------------------------- ``__len__(self)`` ``len(obj)`` Consulta el nombre d'elements ---------------------------- -------------- --------------------------------------------- ``__contains__(self, v)`` ``v in obj`` Consulta si un element pertany a l'objecte ---------------------------- -------------- --------------------------------------------- ``__iter__(self)`` Permet iterar sobre els elements ============================ ============== ============================================= .. rubric:: Exemple: Classe `VectorNDim` .. toctree:: :maxdepth: 1 vector_ndim Classe iterable --------------- * Permet utilitzar la iteració :python:`for var in obj`. * Per defecte, si té el mètode ``__getitem__`` definit, ja és iterable sobre els índexos 0, 1, 2, ... fins que ``__getitem__`` provoca algun error. Per exemple, la classe :py:class:`vectors_ndim.VectorNdim`. * ... o bé té el mètode ``__iter__`` definit, que és un generador o retorna un iterador. Per exemple, la classe :py:class:`feixos.Feix`.