Més sobre disseny de classes ============================ Atributs privats ---------------- * Serveixen per impedir que es faci un mal ús de la classe. * El seu nom comença amb doble subratllat (``__``). * Només són accessibles des de dins del cos de la classe (des de fora, queden "amagats"). .. note:: També podem definir **mètodes privats**, o sigui, funcions auxiliars accessibles només des de dins del cos de la classe. El seu nom comença amb doble subratllat (``__``). Exemple: Classe `Feix` ...................... .. toctree:: :titlesonly: feixos Còpia d'objectes ---------------- Els objectes d'una classe de Python definida per nosaltres **són mutables**. * Mitjançant el mòdul :py:mod:`copy`. Conté dues funcions: :py:func:`copy.copy` i :py:func:`copy.deepcopy`. * :py:func:`copy.copy` fa una còpia de l'objecte, però no dels atributs. * :py:func:`copy.deepcopy` fa una còpia de l'objecte i també dels atributs, dels atributs dels atributs, etc (recursivament). Funcions predefinides de Python per a treballar amb classes ----------------------------------------------------------- * :py:class:`type` (): consulta el tipus d'un objecte. * :py:func:`dir`: retorna una llista amb el nom de tots els atributs i mètodes d'un objecte. * :py:func:`vars`: retorna un diccionari amb els atributs i valors d'un objecte. * :py:func:`isinstance`: indica si un objecte és d'una classe. * :py:func:`issubclass`: indica si una classe hereda (és subclasse) d'una altra. Atributs de classe ------------------ .. caution:: A l'assignatura no s'exigeix saber-ho fer servir, però apareixen amb certa freqüència a la documentació de Python. * Són objectes **únics** compartits per **totes** les instàncies de la classe. * Es defineixen al cos de la classe, al mateix nivell que els mètodes.