""" This module defines an abstract base class `Animal` and its subclasses `Dog` and `Cat`, demonstrating object-oriented principles such as inheritance, abstraction, and polymorphism. Classes: Animal: Abstract base class representing a generic animal. Methods: speak(): Abstract method to be implemented by subclasses for animal sound. move(): Abstract method to be implemented by subclasses for animal movement. Dog(Animal): Represents a dog with breed, name, and age attributes. Methods: speak(): Returns the sound a dog makes ("Woof!"). move(): Returns a description of how a dog moves ("runs energetically"). Cat(Animal): Represents a cat with breed, name, age, and color attributes. Methods: speak(): Returns the sound a cat makes ("Meow!"). move(): Returns a description of how a cat moves ("walks gracefully"). Usage: Demonstrates polymorphism by creating instances of Dog and Cat and invoking their respective speak and move methods. """ class Animal: # Abstract Base Class (Not to be instantiated directly) def __init__(self): pass def speak(self): raise NotImplementedError("Subclasses must implement this method") def move(self): raise NotImplementedError("Subclasses must implement this method") class Dog(Animal): # Subclass of Animal with 3 attributes def __init__(self, breed, name, age): super().__init__() self.breed = breed self.name = name self.age = age def speak(self): # Implementation of abstract method return "Woof!" def move(self): # Implementation of abstract method return "runs energetically" class Cat(Animal): # Subclass of Animal with 4 attributes def __init__(self, breed, name, age, color): super().__init__() self.breed = breed self.name = name self.age = age self.color = color def speak(self): # Implementation of abstract method return "Meow!" def move(self): # Implementation of abstract method return "walks gracefully" # Creating instances of Dog and Cat my_dog = Dog("Collie","Buddy", 9) my_cat = Cat("Simese","Whiskers", 3, "White") my_other_dog = Dog("Snouser","Max", 5) # Demonstrating polymorphism print(f"My {my_dog.breed} dog, {my_dog.name}, age {my_dog.age} says {my_dog.speak()} and {my_dog.move()}") print(f"My {my_cat.color} {my_cat.breed} cat, {my_cat.name}, age {my_cat.age} says {my_cat.speak()} and {my_cat.move()}") print(f"My {my_other_dog.breed} dog, {my_other_dog.name}, age {my_other_dog.age} says {my_other_dog.speak()} and {my_other_dog.move()}")