We need a way for our Tribute object to reduce their hunger. Create a method eat(food), which takes in a Food object. It will reduce the hunger of the player by the food.get food value(). If object that's passed to the eat method is of the type Medicine, it will increment the player’s health by medicine.get medicine value().
Pre-defined code:
class Tribute(Person):
    def reduce_hunger(self, hunger):
        self.hunger = self.hunger - hunger
        if self.hunger < 0:
            self.hunger = 0
        else:
            return self.hunger
class Thing(MobileObject):
    def __init__(self, name):
        super().__init__(name, None)
        self.owner = None 
    def set_owner(self, owner):
        self.owner = owner
    def get_owner(self):
        return self.owner
    def is_owned(self):
        return self.owner is not None
class Person(LivingThing):
   def take(self, thing):
    # Can only take things in current location and not owned by others
        if isinstance(thing, Thing) and thing in self.place.objects and not thing.is_owned():
            thing.set_owner(self)
            self.inventory.append(thing)
            self.place.del_object(thing)
            GAME_LOGGER.add_event("TOOK", self, thing)
        else:
            GAME_LOGGER.warning("{} cannot take {}.".format(self.get_name(), thing.get_name()))
def named_col(col):
    # Only accepts tuple/list
    type_col = type(col)
    if type_col != list and type_col != tuple:
        return None
    return type_col(map(lambda x: x.get_name() if isinstance(x, NamedObject) else x, col))
class Food(Thing):
    def __init__(self, name, food_value):
        self.name = name
        self.food_value = food_value
    def get_food_value(self):
        return self.food_value
class Medicine(Food):
    def __init__(self, name, food_value, medicine_value):
        super().__init__(name, food_value)
        self.medicine_value = medicine_value
    def get_medicine_value(self):
        return self.medicine_value
class MobileObject(NamedObject):
    def __init__(self, name, place):
        super().__init__(name)
        self.place = place
    def get_place(self):
        return self.place
This is my code:
def eat(self, food):
    if food in self.get_inventory():
        self.inventory.remove(food) # not self.inventory = self.inventory.remove(food) cos self.inventory is a list. if use = it wont return anything
        self.reduce_hunger(food.get_food_value())
        if isinstance(self, medicine):
            self.health = self.health + food.get_medicine_value()
            if self.health > 100:
                self.health = 100
            elif self.health <0:
                self.health = 0
To test my code:
cc = Tribute("Chee Chin", 100)
chicken = Food("chicken", 5)
cc.take(chicken)                        # Chee Chin took chicken
cc.take(aloe_vera)                      # Chee Chin took aloe vera
print(named_col(cc.get_inventory()))    # ['chicken', 'aloe vera']
i got this error:
AttributeError: 'Food' object has no attribute 'owner' 
instead of the expected output 'Chee Chin took chicken'.
What's wrong with my code?
