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