[Tutor] Problem appending to a list using a property within a class

Roy Bleasdale royb at ubiquity.com.au
Wed Nov 9 04:54:52 CET 2005


I have created a List within a class. If I try and append to the list using 
the set function using the property value my variable stops being a list.

Can anyone explain why the set function called by the class property does 
not append to the list?


Here is some sample code:

class ShoppingBag:

     def __init__(self):
         self.fruit = []
         self.veg = []
         self.spam = 0
         self.beer = []

     def getspam(self):
         return self.spam

     def setspam(self,value):
         self.spam = value

     spam = property(getspam,setspam,None,None)

     def getveg(self):
         return self.veg

     def setveg(self,value):
         self.veg.append(value)

     veg = property(getveg,setveg,None,None)


     def getfruit(self):
         return self.fruit

     def setfruit(self,value):
         self.fruit.append(value)

     fruit = property(getfruit,setfruit,None,None)

     def Addfruit(self,value):
         self.fruit.append(value)

     def getbeer(self):
         return self.beer

     def setbeer(self,value):
         self.beer.append(value)

     beer = property(getbeer,setbeer,None,None)

bag = ShoppingBag()
bag.spam = 3
bag.veg = "carrots"
bag.veg = "broccoli"
bag.veg = "cauliflower"
bag.Addfruit("apple")
bag.Addfruit("banana")
bag.Addfruit("orange")
bag.setbeer ("coopers")
bag.setbeer("mountain goat")
bag.setbeer("cascade")

print "contents of bag"
print bag.spam
print bag.veg
print bag.fruit
print bag.beer

basket = ShoppingBag()
basket.setveg ( "carrots")
basket.setveg ( "broccoli")
basket.setveg ( "cauliflower")

print "contents of basket"
print basket.veg

when I run it I get:

contents of bag
3
cauliflower
['apple', 'banana', 'orange']
['coopers', 'mountain goat', 'cascade']

contents of basket
['carrots', 'broccoli', 'cauliflower']


Thanks



More information about the Tutor mailing list