<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">class Animal:
    def __init__(self, species, name, cage = None):
        self.species = species
        self.name = name
        self.cage = cage

class Zoo:
    def __init__(self, area, name):
        self.facilities = []
        self.animals = []
        self.area = area
        self.name = name

    def add_animal(self, animal: Animal):
        self.animals.append(animal)

    def add_facility(self, facility):
        self.facilities.append(facility)

    def clear_cages(self):
        # TODO
        pass

    def assign_animals(self):
        self.clear_cages()
        for animal in self.animals:
            animal.cage = None
            for facility in self.facilities:
                if isinstance(facility, Cage):
                    for other_animal in facility.animals:
                        print(facility.animals)
                        if other_animal.species != animal.species:
                            continue
                    facility.add_animal(animal)
            if animal.cage is None:
                print("Animal wasn't assigned to cage ", animal.name)

class Facility:
    def __init__(self, area):
        self.area = area


class Cage(Facility):
    def __init__(self, animals=None):
        if animals is None:
            self.animals = []
        else:
            self.animals = animals

    def add_animal(self, animal):
        self.animals.append(animal)
        animal.cage = self


class Restaurant(Facility):
    def __init__(self):
        pass


animal_1 = Animal("elephant", "ludvig")
animal_2 = Animal("elephant", "daniel")
animal_3 = Animal("lion", "leo")

zoo_1 = Zoo(1000, "My Zoo")

zoo_1.add_animal(animal_1)
zoo_1.add_animal(animal_2)
zoo_1.add_animal(animal_3)

zoo_1.add_facility(Cage())
zoo_1.add_facility(Cage())

zoo_1.assign_animals()
</pre></body></html>