need help with properties

Scott David Daniels Scott.Daniels at Acm.Org
Sat May 9 11:55:15 EDT 2009


Esmail wrote:
> I am just reading about properties in Python. I am thinking
> of this as an indirection mechanism, is that wrong? If so, how
> come the getter/setters aren't called when I use properties
> instead of the functions directly?
Because you weren't actually using them.  You were writing:
     size = 3, 7
not:
     r.size = 3, 7
Try:
     class Rectangle(object):
         def __init__(self):
             self._width = 0 # use single underscore unless you
             self._height = 0 # have a serious reason for __x
         def setSize(self, shape): # a setter takes a single arg
             width, height = shape
             print 'in setter'
             if width < 0 or height < 0:
                 print >> sys.stderr, 'Negative values not allowed'
             else:
                 self._width = width
                 self._height = height
         def getSize(self):
             print 'in getter'
             return self._width, self._height
         size = property(getSize, setSize)

     r = Rectangle()
     print r.getSize()
     r.setSize((-40, 30))
     print r.getSize()
     print '-----------------'
     r.size = 3, 7
     print r.size
     print '-----------------'
     r.size = -3,7
     print r.size

--Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Python-list mailing list