class Animal: def __init__(self, name: str, age: int): self.name = name self.age = age def speak(self) -> str: pass def get_info(self) -> str: return f"{self.name} is {self.age} years old" class Dog(Animal): def __init__(self, name: str, age: int, breed: str): super().__init__(name, age) self.breed = breed def speak(self) -> str: return f"{self.name} says Woof!" def fetch(self) -> str: return f"{self.name} is fetching the ball" class Cat(Animal): def __init__(self, name: str, age: int, indoor: bool = True): super().__init__(name, age) self.indoor = indoor def speak(self) -> str: return f"{self.name} says Meow!" def climb(self) -> str: return f"{self.name} is climbing" class PetOwner: def __init__(self, name: str): self.name = name self.pets = [] def add_pet(self, pet: Animal): self.pets.append(pet) def call_all_pets(self) -> list: # return [pet.speak() for pet in self.pets] result = [] for pet in self.pets: result.append(pet.speak()) return result def create_pet_family(): owner = PetOwner("Alice") dog = Dog("Buddy", 3, "Golden Retriever") cat = Cat("Whiskers", 2, True) owner.add_pet(dog) owner.add_pet(cat) return owner