from exceptions import DeadPlantError from plant import Plant class Bed: _WATERING_THRESHOLD = 5 def __init__(self, location: str) -> None: self.location = location self._plants = [] self.water_level = 0 def __repr__(self) -> str: return f"Bed {self.location}" def __str__(self) -> str: return (f"{self!r}\n" f"Water level: {self.water_level}\n" f"{len(self.plants)} plants: {[p.species for p in self.plants]}") @property def water_level(self) -> int: return self._water_level @water_level.setter def water_level(self, water_level: int): if water_level < 0: raise ValueError(f"No more water in {self!r}.") self._water_level = water_level @property def plants(self) -> list: return self._plants @plants.deleter def plants(self): self._plants.clear() @property def needs_water(self) -> bool: return self.water_level < self._WATERING_THRESHOLD def plant_plant(self, plant: Plant) -> None: self.plants.append(plant) def water(self, added_water: int = 1) -> None: self.water_level += added_water def update(self) -> None: for plant in self.plants: try: self.water_level -= 1 plant.grow() except ValueError: print(f"{self!r} is out of water, plants can't grow") return except DeadPlantError: print(f"{plant!r} in {self!r} is dead and should be removed quickly!") def harvest(self) -> list: harvested = [] for plant in self.plants: harvested.extend(plant.harvest()) return harvested