Առարկաների (շրջակա միջավայրում առկա իրեր) վրա հիմնված ծրագրավորման մեջ ժառանգումը կարևոր հասկացություն է։ Այն կոդը ճիշտ կազմակերպելու միջոց է, և հատկապես օգտակար է, երբ ունենք իրար հետ կապված մի շարք class-ներ: Ժառանգումը class-ին թույլ է տալիս ժառանգել բոլոր մեթոդներն ու հատկությունները մեկ այլ class-ից, ինչը հնարավորություն է տալիս կոդը կրկին կիրառել և ապահովում է class-ների միջև տրամաբանական կապը։
Python-ում ժառանգման կիրառումը ցույց տալու համար եկե՛ք որպես օրինակ դիտարկենք կենդանաբանական այգին: Կենդանաբանական այգում կան տարբեր կենդանիներ՝ շներ, կատուներ և թռչուններ: Չնայած այս կենդանիների խմբերն ունեն միայն իրենց բնորոշ վարքագիծը, դրանք նաև նման են որոշ ընդհանուր հատկանիշներով: Այսպիսի սցենարի դեպքում ժառանգումը կարող է օգնել մեզ՝ խուսափելու կոդի կրկնությունից և այն դարձնելու ավելի կազմակերպված: Տեսնենք, թե ինչպես.
class Animal: # Defining a base class `Animal`
def __init__(self, name, age): # Constructor method with parameters `name` and `age`
self.name = name # Assigning `name` attribute
self.age = age # Assigning `age` attribute
def eat(self): # Common method `eat`
return f'{self.name} is eating.'
def make_sound(self): # Common method `make_sound`
return f'{self.name} makes a sound.'
class Dog(Animal): # Defining `Dog` class that inherits from `Animal`
def make_sound(self): # Overriding the `make_sound` method
return f'{self.name} barks.'
class Cat(Animal): # Defining `Cat` class that inherits from `Animal`
def make_sound(self): # Overriding the `make_sound` method
return f'{self.name} meows.'
class Bird(Animal): # Defining `Bird` class that inherits from `Animal`
def eat(self): # Overriding the `eat` method for `Bird`
return f'{self.name} is pecking at its food.'
def make_sound(self): # Overriding the `make_sound` method
return f'{self.name} chirps.'
# The __init__ method is inherited from Animal
# but you can have __init__ for any of the inherited classes as well
dog = Dog('Rex', 5) # Creating an instance of `Dog`
cat = Cat('Whiskers', 3) # Creating an instance of `Cat`
bird = Bird('Tweety', 2) # Creating an instance of `Bird`
for animal in [dog, cat, bird]: # Iterating over instances
print(animal.eat()) # Calling the inherited or overridden method `eat`
print(animal.make_sound()) # Calling the overridden method `make_sound`
print('-----')
Արդյունքը կլինի.
Rex is eating.
Rex barks.
-----
Whiskers is eating.
Whiskers meows.
-----
Tweety is pecking at its food.
Tweety chirps.
-----
Վերոնշյալ կոդում Animal-ը ծնող class-ն է, իսկ Dog-ը, Cat-ը և Bird-ը ժառանգ class-ներն են: Ժառանգ class-ները բոլոր մեթոդները ժառանգում են Animal class-ից: Սակայն յուրաքանչյուր ժառանգ class փոփոխում է make_sound մեթոդը, քանի որ յուրաքանչյուր կենդանու ձայնը յուրահատուկ է: Մենք նաև փոփոխում ենք Bird class-ում ուտելու մեթոդը, քանի որ թռչնի ուտելու ոճը տարբերվում է Animal class-ում սահմանված ընդհանուր ուտելու վարքագծից:
Այս մոտեցումը թույլ է տալիս մեզ ավելի արդյունավետ ներկայացնել իրական աշխարհի օբյեկտները և դրանց հարաբերությունները՝ ստեղծելով հստակ, հակիրճ և հետագա աշխատանքների համար ավելի հարմար կոդերի բազա: Այսպիսով, ժառանգումը մեզ հնարավորություն է տալիս պարզեցնել և նորից կիրառել կոդը։
Առաջադրանք․ Person & Employee class-ներ
Ձեզանից պահանջվում է ստեղծել երկու class՝ Person և Employee:
Person class-ը պետք է պարունակի հետևյալ ատրիբուտները.
name- Անձի անունը ներկայացնող տող:
age- Անձի տարիքը ներկայացնող ամբողջ թիվ:
Person class-ը պետք է պարունակի նաև հետևյալ մեթոդը.
introduce_yourself() - Այս մեթոդը տպում է տող՝ հետևյալ ձևաչափով. "My name is {name} and I am {age} years old."
Employee class-ը պետք է ժառանգի Person class-ից և ավելացնի հետևյալ ատրիբուտը.
job_title - Անձի աշխատանքային պաշտոնը ներկայացնող տող:
Employee class-ը նույնպես պետք է փոփոխի հետևյալ մեթոդը.
introduce_yourself() - Այս մեթոդը տպում է տող՝ հետևյալ ձևաչափով. "My name is {name}, I am {age} years old, and my job title is {job_title}."