python - AttributeError: 'bool' object has no attribute 'keys' -
i newbie on site , newbie programming, i'm trying learn python using book beginners on python 3.1. have come across example won't work whatever try, have searched faults in writing 10 times still seems see in book. example:
the fridge class
#!/usr/bin/env class fridge: """methods: has(food_name [, quantity])-chk if string in fridge has_various(foods)-chk if enough food in fridge add_one(food_name) -adds 1 food add_many(food_dict)- adds dict fridge get_one(food_name)- take out 1 food get_many(food_dict) - dict out of fridge get_ingred(food)- if passed obj list of __ingredients__ """ def __init__(self, items={}) : if type(items) != type({}): raise typeerror("fridge req dict given %s" % type(items)) self.items=items return def __add_multi(self, food_name, quantity): if (not food_name in self.items): self.items[food_name]=0 self.items[food_name]=self.items[food_name]+quantity def add_one(self, food_name): if type(food_name) != type(""): raise typeerror ("add_one requires string givem %s " % type(food_name)) else: self.__add_multi(food_name, 1) return true def add_many(self, food_dict): if type(food_dict) != type({}): raise typeerror ("add_many requires dict, got %s" % type(food_dict)) item in food_dict.keys() : self.__add_multi(item, food_dict[item]) return def has(self, food_name, quantity=1): return self.has_varoius({food_name:quantity}) def has_various(self, foods): try: food in foods.keys(): if self.items[food] < foods[food]: return false return true except keyerror: return fasle def __get_multi(self, food_name, quantity): try: if (self.items[food_name] none) : return false if (quantity > self.items[food_name]): return false self.items[food_name] = self.items[food_name] - quantity except keyerror: return false return quantity def get_one(self, food_name): if type(food_name) !=type(""): raise typeerror("get_one requires string , given %s" % type(food_name)) else: result=self.__get_multi(food_name, 1) return result def get_many(self, food_dict): if self.has_various(food_dict): foods_removed={} item in food_dict.keys(): foods_removed[item]=self.__get_multi(item, food_dict[item]) return foods_removed def get_ingredients(self, food): try: ingredients=self.get_many(food.__ingredients()) except attributeerror: return false if ingredients!=false: return ingredients the omelet class
#!/usr/bin/env python3.3 class omelet: def __init__(self, kind="cheese"): self.set_kind(kind) return def __ingredients__(self): return self.needed_ingredients def get_kind(self): return self.kind def set_kind(self, kind): possible_ingredients=self.__known_kinds(kind) if possible_ingredients == false : return false else: self.kind=kind self.needed_ingredients= possible_ingredients def set_new_kind(self, name, ingredients): self.kind=name self.needed_ingredients= ingredients return def __known_kinds(self, kind): if kind == "cheese": return {"eggs":2, "milk":1, "cheese":1} elif kind == "mushroom": return {"eggs":2, "milk":1, "cheese":1, "mushroom":2} elif kind == "onion": return {"eggs":2, "milk":1, "cheese":1, "onion":1} else: return false def get_ingredients(self, fridge): self.from_fridge= fridge.get_ingredients(self) def mix(self): ingredient in self.from_fridge.keys(): print("mixing %d %s %s omelet" % (self.from_fridge["ingredient"], ingredient, self.kind)) self.mixed=true def make(self): if self.mixed == true: print("cooking %s omelet!" % self.kind) self.cooked = true this how invoke classes , use classes , error get
>>> exec(open("/home/knoppix/test/fridge.py").read()) >>> exec(open("/home/knoppix/test/omelet.py").read()) >>> o=omelet("cheese") >>> f=fridge({"cheese":5, "milk":4, "eggs":12}) >>> o.get_ingredients(f) >>> o.mix() traceback (most recent call last): file "<stdin>", line 1, in <module> file "<string>", line 41, in mix attributeerror: 'bool' object has no attribute 'keys' please excuse me if there typing fault in code , it`s found in book!
def get_ingredients(self, fridge): self.from_fridge= fridge.get_ingredients(self) in function, fridge.get_ingredients() might returning false.
so self.from_fridge has boolean value not have keys() method.
you may want add appropriate check in mix() method.
Comments
Post a Comment