Paveldėjimas leidžia klasei (subklasė arba podklasė) pakartotinai naudoti ir pratęsti kitos klasės (superklasės arba pagrindinės klasės) laukus ir metodus. Jis modeliuoja is-a santykį: Dog yra Animal.
Paveldėjimas leidžia klasei (subklasė arba podklasė) pakartotinai naudoti ir pratęsti kitos klasės (superklasės arba pagrindinės klasės) laukus ir metodus. Jis modeliuoja is-a santykį: Dog yra 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 gavo __init__ ir eat nemokamai ir pridėjo bark. Podklasė taip pat gali perrašyti paveldėtus metodus, kad pakeistų elgesį.
| Privalumas | Rizika |
|---|---|
| Bendrinti kodą pakartotinai naudoti | Glaudus ryšys su pagrindinė klasę |
| Modeliuoti tikrąsias hierarchijas | Trapus bazinis klasė — pagrindinės klasės pokyčiai palaužia vaikus |
| Polimorfizmas per bendrą tipą | Gilos medžiai tampa sunkiai sekiami |
Bendra gairė: teikti pirmenybę kompozicijai prieš paveldėjimą, kai santykis tikrai yra "has-a", o ne "is-a".
Paveldėjimas yra dažniausiai netaisingai naudojama OOP funkcija: ji yra patraukli naudoti tik kodui bendrinti, kas susieja nesusijusias klases.
Teisingu naudojimu — tik tikroms is-a santykiams — jis suteikia pakartotinį naudojimą ir polimorfizmą, leidžiant vienodai traktuoti daug potipių per jų bendrąją pagrindinę klasę.