March 5
Наследование. Полиморфизм
class Mammal: className = 'Mammal' class Dog(Mammal): species = 'Dog' className = 'DogMammal' class Cat(Mammal): species = 'Cat' dog = Dog() cat = Cat() print(dog.className, cat.className, sep = '\n')
# Реализуйте два дочерних класса Cat и Dog для класса Animal. # Добавьте дополнительные методы и атрибуты, специфичные для каждого подкласса class Animal: def __init__(self, name: str, age: int) -> None: self.name = name self.age = age def speak(self) -> 'Animal': print('Animal speaks') return self def print_info(self) -> 'Animal': print('\n'.join([ f'Экземпляр {self} класса {self.__class__.__name__}', f' Имя: {self.name}', f' Возраст: {self.age}' ]), end = '\n\n') return self def move(self) -> 'Animal': print(f'{self.__class__.__name__} moves') return self class Dog(Animal): def __init__(self, name: str, age: int) -> None: super().__init__(name, age) def speak(self) -> None: print('Hawk') def print_info(self) -> 'Animal': print('\n'.join([ f'Собака', f' Имя: {self.name}', f' Возраст: {self.age}' ]), end = '\n\n') return self class Cat(Animal): def __init__(self, name: str, age: int) -> None: super().__init__(name, age) def speak(self) -> None: print('Meow') def print_info(self) -> 'Animal': print('\n'.join([ f'Кошка', f' Имя: {self.name}', f' Возраст: {self.age}' ]), end = '\n\n') return self def purr(self) -> 'Animal': print('Cat purrs') return self class Bunny(Animal): def __init__(self, name: str, age: int) -> None: super().__init__(name, age) def speak(self) -> 'Animal': print('*The bunny squeals*') return self def print_info(self) -> 'Animal': print('\n'.join([ f'Заяц', f' Имя: {self.name}', f' Возраст: {self.age}' ]), end = '\n\n') return self def move(self) -> 'Animal': print(f'Bunny jumps') return self def main(): animal = Animal('Боб', 3) dog = Dog('Собака-бабака', 6) cat = Cat('Хрюша', 4) bunny = Bunny('Снежок', 2) for animal in [animal, dog, cat, bunny]: animal.print_info() for animal in [animal, dog, cat, bunny]: animal.move() cat.purr() if __name__ == '__main__': main()