Python-ի միջին մակարդակ

Ժառանգականություն

Ժառանգականությունը հզոր հասկացություն է օբյեկտ-կողմնորոշված ծրագրավորման մեջ: Դա կոդի կազմակերպման միջոց է, և այն հատկապես օգտակար է, երբ դուք ունեք մի շարք կլասներ, որոնք կապված են միմյանց հետ: Ժառանգականությունը թույլ է տալիս կլասին ժառանգել բոլոր մեթոդներն ու հատկությունները մեկ այլ կլասից՝ խթանելով կոդի կրկնակի օգտագործման հնարավորությունը և կլասների միջև տրամաբանական կապվածությանը։
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-ը ծնող կլասն է, մինչդեռ Dog-ը, Cat-ը և Bird-ը ժառանգ կլասներն են: Ժառանգ կլասները ժառանգում են բոլոր մեթոդները Animal կլասից: Այնուամենայնիվ, յուրաքանչյուր ժառանգ կլաս փոփոխում է make_sound մեթոդը, քանի որ յուրաքանչյուր կենդանու ձայնը յուրահատուկ է: Մենք նաև փոփոխում ենք Bird կլասում ուտելու մեթոդը, քանի որ թռչնի ուտելու ոճը տարբերվում է Animal կլասում սահմանված ընդհանուր ուտելու վարքագծից:
Այս մոտեցումը թույլ է տալիս մեզ ավելի արդյունավետ ներկայացնել իրական աշխարհի օբյեկտները և նրանց հարաբերությունները՝ դրանով իսկ ստեղծելով հստակ, հակիրճ և հետագա աշխատանքների համար ավելի հարմար կոդերի բազա: Այսպիսով, ժառանգականությունը մեզ հնարավորություն է տալիս օգտվել կոդի վերօգտագործման և բարդության նվազեցման առավելություններից:

Առաջադրանք: Person & Employee կլասներ

Ձեզանից պահանջվում է ստեղծել երկու կլաս Person և Employee:
Person կլասը պետք է պարունակի հետևյալ ատրիբուտները.
  • name: Անձի անունը ներկայացնող տող:
  • age: Անձի տարիքը ներկայացնող ամբողջ թիվ:
Person կլասը պետք է պարունակի նաև հետևյալ մեթոդը.
  • introduce_yourself(): Այս մեթոդը տպում է տող հետևյալ ձևաչափով. "My name is {name} and I am {age} years old."

Employee կլասը պետք է ժառանգի Person կլասից և ավելացնի հետևյալ ատրիբը.
  • job_title:Անձի աշխատանքի անվանումը ներկայացնող տող:
Employee կլասը նույնպես պետք է փոփոխի հետևյալ մեթոդը.
  • introduce_yourself(): Այս մեթոդը տպում է տող հետևյալ ձևաչափով."My name is {name}, I am {age} years old, and my job title is {job_title}."
Մուտք
Ելք
alice=Person('Alice', 25); alice.introduce_yourself(); bob=Employee('Bob', 30, 'Engineer'); bob.introduce_yourself();
My name is Alice and I am 25 years old. My name is Bob, I am 30 years old, and my job title is Engineer.
 

Constraints

Time limit: 0.2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue