self doesn't refer to anything? It is undefined because it is in main and not in a method of an object.
You have to do crit.talk() where crit is an object (which by the way isn't, you have crit1 and crit2) On 17 June 2011 09:28, David Merrick <merrick...@gmail.com> wrote: > # Critter Caretaker > # A virtual pet to care for > class Farm(object): > #A collection of Critters > > def talk(self,farm): > farm.talk() > > > > class Critter(object): > > """A virtual pet""" > def __init__(self, name, hunger = 0, boredom = 0): > self.name = name > self.hunger = hunger > self.boredom = boredom > > # __ denotes private method > def __pass_time(self,farm): > self.hunger += 1 > self.boredom += 1 > self.__str__() > > def __str__(self,farm): > print("Hunger is",self.hunger, "Boredom is " ,self.boredom) > print("Unhappines is ",self.hunger + self.boredom," and Mood is > ",self.mood) > > > > @property > def mood(self,farm): > unhappiness = self.hunger + self.boredom > if unhappiness < 5: > m = "happy" > elif 5 <= unhappiness <= 10: > m = "okay" > elif 11 <= unhappiness <= 15: > m = "frustrated" > else: > m = "mad" > return m > > def talk(self,farm): > print("I'm", self.name, "and I feel", self.mood, "now.\n") > self.__pass_time() > > > def eat(self,farm): > food = int(input("Enter how much food you want to feed your critter: > ")) > print("Brruppp. Thank you.") > self.hunger -= food > # hunger = 0 at iniatition > # self.hunger = self.boredom - food > if self.hunger < 0: > self.hunger = 0 > self.__pass_time() > > > def play(self,farm): > fun = int(input("Enter how much fun you want your critter to have: > ")) > print("Wheee!") > self.boredom -= fun > # boredom = 0 at iniatition > # self.boredom = self.boredom - fun > if self.boredom < 0: > self.boredom = 0 > self.__pass_time() > > > def main(): > ## crit_name = input("What do you want to name your critter?: ") > ## crit = Critter(crit_name) > > crit1 = Critter("Sweetie") > crit2 = Critter("Dave") > farm = [crit1,crit2] > > 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": > self.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.") > > Critter Caretaker > > 0 - Quit > 1 - Listen to your critter > 2 - Feed your critter > 3 - Play with your critter > > Choice: 1 > > Traceback (most recent call last): > File "D:\David\Python\programs\critter_farm2.py", line 118, in <module> > main() > File "D:\David\Python\programs\critter_farm2.py", line 100, in main > self.talk() > NameError: global name 'self' is not defined >>>> > > -- > Dave Merrick > > merrick...@gmail.com > > Ph 03 3423 121 > Cell 027 3089 169 > > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > http://mail.python.org/mailman/listinfo/tutor > > _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor