, , , , , , ,

Herència en classes Python

El concepte de l'herència es contempla en la definició de classes en Python.

En cas d'herència, hi haurà la classe mare i la classe filla. La classe filla és la qui hereta de la mare.

Des de la classe filla, la classe mare s'entén com a «superclasse».

Des de la classe mare, la classe filla s'entén com a «subclasse».

I què hereta la filla? Doncs hereta atributs i mètodes. Si la filla té mètode constructor, sobreescriu el constructor de la mare (= no hi ha sobrecàrrega!).

Exemple d'herència de classes

# L'Herència és una relació de ‘Generalització’
# ja que la classe pare és un ‘cas general’ de la clase filla
 
# classe mare (superclasse)
class Vehicle:
    n_rodes = 3
 
 
# classe filla (subclasse)
class Cotxe(Vehicle):
    color = "gris"
    preu = 30000
    n_portes = 3
 
    def indicador(self):
        print("és un cotxe")
 
    def indicador2(self):
        print("és un cotxe 2")
 
 
class Bmw(Cotxe):
    modelbmw = "320"
 
    def indicador(self):
        print("és un BMW")
        # com que té el mateix nom que el de la mare el sobreescriu (Cotxe)
        # a Python no hi ha sobrecàrrega de mètode
        # podem fer quelcom semblant a la sobrecàrrega usant paràmetres opcionals
 
 
cotxeconcret = Bmw()
# cotxeconcret, de la classe Bmw, té tots els membres
# específics de la seva classe (Bmw) i a més tots els heretats
# de les classes que hereta (Cotxe i Vehicle)
cotxeconcret.n_rodes = 4
cotxeconcret.color = "blau"
cotxeconcret.preu = 40000
cotxeconcret.n_portes = 5
cotxeconcret.modelbmw = "520"
cotxeconcret.indicador()  # executa el de la classe filla
cotxeconcret.indicador2()
 
print("Número de rodes: " + str(cotxeconcret.n_rodes) +
      "    Color: " + cotxeconcret.color +
      "    Preu: " + str(cotxeconcret.preu) +
      "    Número de portes: " + str(cotxeconcret.n_portes) +
      "    Model BMW: " + cotxeconcret.modelbmw)
 
print("     ")
 
# podem comprovar si una classe deriva d'una altra
print(issubclass(Cotxe, Vehicle))  # True   classe Cotxe és subclasse de classe Vehicle
print(issubclass(Vehicle, Cotxe))  # False
print(issubclass(Bmw, Vehicle))  # True   classe Bmw també deriva de classe Vehicle
print(issubclass(Cotxe, Cotxe))  # True   una clase també és subclasse d'ella mateixa
 
print(issubclass(Bmw, (Vehicle, Cotxe)))  # True
# en el segon paràmetre podem posar-hi una tupla de classes en lloc d'una sola classe
 
print("     ")
 
# podem comprovar si un objecte és instància d'una classe
print(isinstance(cotxeconcret, Bmw))  # True
# tambien se considera instancia de las clases de las que deriva su propia clase
print(isinstance(cotxeconcret, Cotxe))  # True
print(isinstance(cotxeconcret, Vehicle))  # True
print(isinstance(cotxeconcret, (Vehicle, Cotxe)))  # True
# en el segon paràmetre podem posar-hi una tupla de classes en lloc d'una sola classe