Dědičnost umožňuje třídě (podtřída nebo potomek) znovu používat a rozšiřovat pole a metody jiné třídy (nadtřída nebo rodič). Modeluje vztah is-a: Dog je Animal.
Dědičnost umožňuje třídě (podtřída nebo potomek) znovu používat a rozšiřovat pole a metody jiné třídy (nadtřída nebo rodič). Modeluje vztah is-a: 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 dostala __init__ a eat zdarma a přidala bark. Podtřída může také přepsat zděděné metody, aby změnila chování.
| Výhoda | Riziko |
|---|---|
| Znovupoužití sdíleného kódu | Těsná vazba na rodiče |
| Modelování skutečných hierarchií | Křehká základní třída — změny rodiče rozbijí potomky |
| Polymorfismus přes společný typ | Hluboké stromy se stávají těžko sledovatelnými |
Obvyklá zásada: dávejte přednost kompozici před dědičností, když je vztah skutečně "has-a", ne "is-a".
Dědičnost je nejčastěji zneužívanou funkcí OOP: je lákavé ji používat jen pro sdílení kódu, což spojuje nesouvisející třídy.
Správně použitá — pouze pro skutečné vztahy is-a — vám dává znovupoužití plus polymorfismus, což vám umožňuje jednotně zacházet s mnoha podtypy jejich skrze jejich společného rodiče.