"David Merrick" <merrick...@gmail.com> wrote
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

Reply via email to