[Tutor] Tutor Digest, Vol 88, Issue 89
David Merrick
merrickdav at gmail.com
Thu Jun 23 00:31:08 CEST 2011
>
> 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/
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110623/db7588dc/attachment.html>
More information about the Tutor
mailing list