[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