მემკვიდრეობა საშუალებას აძლევს კლასს (ქვეკლასს ან შვილობილი კლასს) გამოიყენოს და გააფართოოს სხვა კლასის (მშობელი კლასის) ველები და მეთოდები. იგი აყალიბებს is-a ურთიერთობას: Dog .
მემკვიდრეობა საშუალებას აძლევს კლასს (ქვეკლასს ან შვილობილი კლასს) გამოიყენოს და გააფართოოს სხვა კლასის (მშობელი კლასის) ველები და მეთოდები. იგი აყალიბებს is-a ურთიერთობას: Dog .
Animalclass 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 მიიღო __init__ და eat უფასოდ და დამატა bark. ქვეკლასს ასევე შეუძლია გადაფარვა მემკვიდრე მეთოდებზე ქცევის შესაცვლელად.
| სარგებელი | რისკი |
|---|---|
| გაზიარებული კოდის გამოიყენება | მჭიდრო დაკავშირება მშობელ კლასთან |
| რეალური იერარქიების მოდელირება | კრთინი ბაზის კლასი — მშობლის ცვლილებები უღებავს ბავშვებს |
| პოლიმორფიზმი საერთო ტიპის მეშვეობით | ღრმა ხეები ხდება რთული გასაშინებელი |
ზოგადი სახელმძღვანელო: კომპოზიციის უპირატესობა მემკვიდრეობაზე როდესაც ურთიერთობა ნამდვილად "has-a" არის, არა "is-a".
მემკვიდრეობა ყველაზე არასწორად გამოყენებული OOP ფუნქციაა: ლოცინი აქვს მხოლოდ კოდის გაზიარებისთვის მისი გამოყენება, რაც დაკავშირებული აქვს უკავშირო კლასებს.
სწორად გამოყენებული — მხოლოდ ნამდვილი is-a ურთიერთობებისთვის — ეს გეძლევთ გამოყენება პლუს პოლიმორფიზმი, რაც გაძლევთ უამრავი ქვეტიპი ერთნაირად განიხილოთ მათი საერთო მშობელი კლასის მეშვეობით.