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