| 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: |
| |
| 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 |
|
|