Classes - Herència ================== * Mecanisme per definir una classe a partir d'una altra de semblant. * Classe **base** = classe original; classe **derivada** = nova classe, que hereda (també anomenada *subclasse*). * S'hereden **tots** els mètodes (i per tant els atributs, perquè s'hereda ``__init__``), però * es poden afegir nous mètodes i atributs * es poden redefinir mètodes * es poden reaprofitar els mètodes de la classe base, cridant_los amb ``super().metode(...)`` * Per afegir nous atributs, redefinirem ``__init__`` en la classe derivada. Convé cridar -hi a :python:`super().__init__(...)`. .. attention:: Una classe derivada **no** pot accedir als atributs privats de la classe base. .. rubric:: Sintaxi: definició d'una classe utilitzant herència .. code-block:: python class ClasseDerivada(ClasseBase): # ClasseDerivada hereda de ClasseBase def __init__(self, ...): super().__init__(...) self.atr1 = ... self.atr2 = ... ... def metode1 (self, ...): ... .. rubric:: Exemple: Definció de la classe ``Rectangle`` que es deriva (per herència) de la classe ``Quadrat``. Li afegeix un atribut i redefineix els mètodes que cal. Vegeu el mòdul :download:`rectangles.py`.