I cannot find out why the following code generates the error:
Traceback (most recent call last):
  File "D:/a/Utilities/python/ptyhon22/test.py", line 97, in ?
    main()
  File "D:/a/Utilities/python/ptyhon22/test.py", line 60, in main
    crit = Critter(crit_name)
  File "D:/a/Utilities/python/ptyhon22/test.py", line 8, in __init__
    self.feed = feed            # I wrote this
AttributeError: can't set attribute

I add some codes to a program on a book. The lines that have "I wrote
this" comment is the added codes. Could anyone tell me what is worng
here?

--------------
##
class Critter(object):
    """A virtual pet"""
    def __init__(self, name, hunger = 0, boredom = 0, feed = 0):
        self.name = name
        self.hunger = hunger
        self.boredom = boredom
        self.feed = feed            # I wrote this

    def __pass_time(self):
        self.hunger += 1
        self.boredom += 1

    def __feed_time(self):          # I worte this
        self.feed += 1              # I wote this

    def __get_feed(self):           # I wrote this
        return self.feed            # I worte this

    feed = property(__get_feed)     # I wrote this

    def __get_mood(self):
        unhappiness = self.hunger + self.boredom
        if unhappiness < 5:
            mood = "happy"
        elif 5 <= unhappiness <= 10:
            mood = "okay"
        elif 11 <= unhappiness <= 15:
            mood = "frustrated"
        else:
            mood = "mad"
        return mood

    mood = property(__get_mood)

    def talk(self):
        print "I'm", self.name, "and I feel", self.mood, "now.\n"
        self.__pass_time()

    def eat(self, food = 4):
        print "Brruppp.  Thank you."
        self.hunger -= food
        self.__feed_time()          # I wrote this
        print self.feed             # I wrote this
        if self.hunger < 0:
            self.hunger = 0
        self.__pass_time()

    def play(self, fun = 4):
        print "Wheee!"
        self.boredom -= fun
        if self.boredom < 0:
            self.boredom = 0
        self.__pass_time()

##

def main():
    crit_name = raw_input("What do you want to name your critter?: ")
    crit = Critter(crit_name)

    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 = raw_input("Choice: ")
        print

        # exit
        if choice == "0":
            print "Good-bye."

        # listen to your critter
        elif choice == "1":
            crit.talk()

        # feed your critter
        elif choice == "2":
            crit.eat()

        # play with your critter
        elif choice == "3":
            crit.play()

        # some unknown choice
        else:
            print "\nSorry, but", choice, "isn't a valid choice."

main()
("\n\nPress the enter key to exit.")

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to