Perintö sallii luokan (aliluokka tai lapsi) käyttää uudelleen ja laajentaa toisen luokan (yliluokka tai vanhempi) kenttiä ja metodeja. Se mallintaa is-a-suhdetta: Dog on Animal.
Perintö sallii luokan (aliluokka tai lapsi) käyttää uudelleen ja laajentaa toisen luokan (yliluokka tai vanhempi) kenttiä ja metodeja. Se mallintaa is-a-suhdetta: Dog on Animal.
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Dog(Animal): # Dog inherits everything from Animal
def bark(self): # ...and adds new behavior
return "Woof!"
d = Dog("Rex")
print(d.eat()) # "Rex is eating" → inherited, not rewritten
print(d.bark()) # "Woof!" → Dog-specific
Dog sai __init__ ja eat ilmaiseksi ja lisäsi bark. Aliluokka voi myös ohittaa perityt metodit käyttäytymisen muuttamiseksi.
| Etu | Riski |
|---|---|
| Jaa koodin uudelleen käyttö | Tiukka kytkentä vanhempaan |
| Todellisten hierarkioiden mallintaminen | Hauras perusluokka — vanhemman muutokset rikkovat lapsia |
| Polymorfismi yhteisen tyypin kautta | Syvät puut tulevat vaikeiksi seurata |
Yleinen ohje: suosi kokoonpanoa perinnön sijasta, kun suhde on todella "has-a", ei "is-a".
Perintö on eniten väärinkäytetty OOP-ominaisuus: sen käyttäminen vain koodin jakamiseen on houkuttelevaa, mikä kytkee toisiinsa liittymättömät luokat.
Kun sitä käytetään oikein — vain aidoille is-a-suhteille — se antaa sinulle uudelleenkäytön plus polymorfismin, jolloin voit käsitellä monia alatyyppejä yhtenäisesti niiden yhteisen vanhemman kautta.