> > Can someone show me how to code this correctly please > > > class Critter(object): > > > > def __init__(self, name, hunger = 0, boredom = 0): > > def __pass_time(self): > > def __str__(self): > > @property > > def mood(self): > > def talk(self): > > def eat(self): > > def play(self): > > > > class Farm(Critter): > > I still don't think a Farm is a type of Critter... > > > def __init__(self,farmlet): > > Critter.__init__(self,farmlet) > > This will set the name to farmlet, which I don't > think you want. > > > def talk(self,farmlet): > > You don't need to pass farmlet in since the > class has farmlet stored inside it. > You can access farmlet with self.farmlet. > > > for critter in farmlet: > > print("Hello") > > Critter.talk(farmlet) > > You want the instance to talk not the class. > So you need to use critter.talk() And the talk > method does not take any arguments except > self. What you are doing here is calling the > class method with an instance value of farmlet. > ie self in that method gets the value of farmlet. > > > def main(): > > crit1 = Critter("Sweetie") > > crit2 = Critter("Dave") > > farmlet = [crit1,crit2] > > f = Farm(farmlet) > > > > choice = None > > while choice != "0": > > print \ > > (""" > > Critter Caretaker > > > > 0 - Quit > > 1 - Listen to your critter > > 2 - Feed your critter > > 3 - Play with your critter > > """) > > > > choice = input("Choice: ") > > print() > > > > # exit > > if choice == "0": > > print("Good-bye.") > > > > # listen to your critter > > elif choice == "1": > > f.talk(farmlet) > > > > # feed your critter > > elif choice == "2": > > f.eat(farmlet) > > Note that f.eat is a method you inherit from Critter. > The Critter method does not take any arguments > so this will fail. > > > # play with your critter > > elif choice == "3": > > f.play(farmlet) > > Same with f.play() > > > Traceback (most recent call last): > > File "D:/David/Python/programs/critter_farm3.py", line 72, in talk > > Critter.talk(farmlet) > > File "D:/David/Python/programs/critter_farm3.py", line 38, in talk > > print("I'm", self.name, "and I feel", self.mood, "now.\n") > > AttributeError: 'list' object has no attribute 'name' > > This is because you are accessing the method via > the class and passing farmlet as the instance value > rather than sending the message to the innstance > directly. Use > > critter.talk() # and no farmlet needed! > > HTH, > > > -- > Alan Gauld > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > > > > >
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor