Наследование

Наследование — это мощная концепция в объектно-ориентированном программировании. Это способ организации кода, который особенно полезен, когда у вас есть несколько связанных между собой классов. Наследование позволяет одному классу получать все методы и свойства от другого класса, способствуя повторному использованию кода и установлению логических связей между классами.
Чтобы показать использование наследования в Python, давайте рассмотрим пример зоопарка. В зоопарке есть различные животные: собаки, кошки и птицы. Хотя эти животные имеют свои уникальные поведения, они также разделяют общие характеристики. В такой ситуации наследование может помочь нам избежать повторения кода и сделать его более организованным. Давайте посмотрим, как это работает:
class Animal:                                         # Определяем базовый класс Animal
    def __init__(self, name, age):                    # Конструктор с параметрами name и age
        self.name = name                              # Устанавливаем атрибут name
        self.age = age                                # Устанавливаем атрибут age

    def eat(self):                                    # Общий метод eat
        return f'{self.name} is eating.'

    def make_sound(self):                             # Общий метод make_sound
        return f'{self.name} makes a sound.'

class Dog(Animal):                                    # Определяем класс Dog, наследующий от Animal
    def make_sound(self):                             # Переопределяем метод make_sound
        return f'{self.name} barks.'

class Cat(Animal):                                    # Определяем класс Cat, наследующий от Animal
    def make_sound(self):                             # Переопределяем метод make_sound
        return f'{self.name} meows.'

class Bird(Animal):                                   # Определяем класс Bird, наследующий от Animal
    def eat(self):                                    # Переопределяем метод eat для Bird
        return f'{self.name} is pecking at its food.'

    def make_sound(self):                             # Переопределяем метод make_sound
        return f'{self.name} chirps.'

# Метод __init__ наследуется от Animal
# но вы можете определить __init__ и для любого из наследуемых классов
dog = Dog('Rex', 5)                                   # Создаем экземпляр класса Dog
cat = Cat('Whiskers', 3)                              # Создаем экземпляр класса Cat
bird = Bird('Tweety', 2)                              # Создаем экземпляр класса Bird

for animal in [dog, cat, bird]:                       # Перебираем экземпляры
    print(animal.eat())                               # Вызываем наследованный или переопределенный метод eat
    print(animal.make_sound())                        # Вызываем переопределенный метод 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, поскольку звук, издаваемый каждым животным, уникален. Мы также переопределяем метод eat в классе 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: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

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