Disseny d'una classe simple =========================== * Conté **atributs** (=dades) i **mètodes** (=funcions o operacions) sobre objectes de la classe. .. rubric:: Sintaxi: .. grid:: 2 .. grid-item-card:: Definició de la classe .. code-block:: python class NomClasse: def __init__(self, ...): self.atr1 = ... self.atr2 = ... ... def metode1 (self, ...): ... .. grid-item-card:: Ús de la classe .. code-block:: python var = NomClasse(...) # Creació (o instanciació) var.atr # Consulta un atribut var.atr = valor # Assigna un valor a un atribut x = var.metode1(...) # Crida el mètode de x Exemple: Classe `Vector` ------------------------ .. toctree:: :titlesonly: vectors Mètodes especials ----------------- * El seu nom comença i acaba amb doble subratllat. * Estan prefixats per Python, tant el nom com el nombre de paràmetres, i de vegades el tipus de retorn. ============================ =================== ============================ Mètode especial Crida Significat ============================ =================== ============================ ``__init__(self, ...)`` ``var=Classe(...)`` Crea (instancia) un objecte de la classe ---------------------------- ------------------- ---------------------------- ``__str__(self)`` ``str(obj)``, Transforma a string. ``print(obj)`` És cridat per ``print()`` ---------------------------- ------------------- ---------------------------- *Operadors matemàtics* ------------------------------------------------------------------------------- ``__add__(self, other)`` ``obj + obj2`` Suma ---------------------------- ------------------- ---------------------------- ``__sub__(self, other)`` ``obj - obj2`` Resta ---------------------------- ------------------- ---------------------------- ``__mul__(self, other)`` ``obj * obj2`` Multiplicació ---------------------------- ------------------- ---------------------------- ``__truediv__(self, other)`` ``obj / obj2`` Divisió ---------------------------- ------------------- ---------------------------- *Operadors de comparció*. Retornen un booleà. ------------------------------------------------------------------------------- ``__eq__(self, other)`` ``ojb1 == obj2`` Igual que ---------------------------- ------------------- ---------------------------- ``__ne__(self, other)`` ``ojb1 != obj2`` Diferent de ---------------------------- ------------------- ---------------------------- ``__lt__(self, other)`` ``ojb1 < obj2`` Més petit que ---------------------------- ------------------- ---------------------------- ``__le__(self, other)`` ``ojb1 <= obj2`` Més petit o igual que ---------------------------- ------------------- ---------------------------- ``__gt__(self, other)`` ``ojb1 > obj2`` Més gran que ---------------------------- ------------------- ---------------------------- ``__ge__(self, other)`` ``ojb1 >= obj2`` Més gran o igual que ============================ =================== ============================ * Quan en una classe hi definim un d'aquests operadors, es diu que es **sobrecarrega**. Per exemple, podem sobrecarregar l'operador de suma (`+`) per a què serveixi per a sumar no només nombres i llistes, sinó també vectors.