Arv lar en klasse (underkassen eller child) gjenbruke og utvide feltene og metodene til en annen klasse (superklassen eller parent). Det modellerer et is-a-forhold: en Dog er en 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 fikk __init__ og eat gratis og la til bark. En underklasse kan også overstyre arvede metoder for å endre oppførselen.
| Fordel | Risiko |
|---|---|
| Gjenbruke delt kode | Tett koblingen til foreldren |
| Modellere ekte hierarkier | Skjør basisklasse — endringer i forelden bryter barn |
| Polymorfisme via en felles type | Dype trær blir vanskelige å følge |
En vanlig retningslinje: foretrekk komposisjon fremfor arv når forholdet virkelig er "har-en", ikke "er-en".
Arv er den mest misbrukte OOP-funksjonen: det er fristende å bruke den bare for å dele kode, noe som kobler sammen uavhengige klasser.
Når det brukes riktig — bare for ekte is-a-forhold — gir det deg gjenbruk pluss polymorfisme, slik at du kan behandle mange undertyper enhetlig gjennom deres felles forelder.
Et bibliotek av IT-intervjuspørsmål med detaljerte svar — fra Junior til Senior.
Doner