Naslijeđivanje omogućuje klasi (podklasi ili dijete) da ponovo koristi i proširi polja i metode druge klase (superklase ili roditeljske). Modelira je-a odnos: Dog je Animal.
Naslijeđivanje omogućuje klasi (podklasi ili dijete) da ponovo koristi i proširi polja i metode druge klase (superklase ili roditeljske). Modelira je-a odnos: Dog je 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 je besplatno dobio __init__ i eat te dodao bark. Podklasa može također zaobići naslijeđene metode kako bi promijenila ponašanje.
| Korist | Rizik |
|---|---|
| Ponovno korištenje dijeljenog koda | Čvrsta povezanost s roditeljskom klasom |
| Modeliranje stvarne hijerarhije | Krhka bazna klasa — promjene roditeljske klase ruše dijete |
| Polimorfizam preko zajedničkog tipa | Duboka stabla postaju teška za praćenje |
Obična smjernica: favorizirati komenziju naslijeđivanju kada je odnos zapravo "ima-a", a ne "je-a".
Naslijeđivanje je najednostavnije zlorabljenoj OOP svojstvo: pokušavajuće ga koristiti samo za dijeljenje koda što čvrsto povezuje nepovezane klase.
Kako korišteno — samo za pravi je-a odnos — daje vam ponovno korištenje plus polimorfizam, omogućavajući vam da jednoliko tretirate mnoge podtipove kroz njihovu zajedničku roditeljsku klasu.