I am happier with this:

class PointND(list, object):

  def __init__(self, *a_list):
    super(PointND, self).__init__(a_list)
    self.maxIndex = len(self) - 1

  def getSet(ix, attName):
msg = "'%s' object has no attribute '%s'" % (p.__class__.__name__, attName)
    def get(self):
      if self.maxIndex < ix:
        raise AttributeError, msg
      return self[ix]
    def set(self, value):
      if self.maxIndex < ix:
        raise AttributeError, msg
      self[ix] = value
    return property(get, set)

  x = getSet(0, 'x')
  y = getSet(1, 'y')
  z = getSet(2, 'z')

p = PointND(1,2,3)
assert (p.x, p.y, p.z) == (1, 2, 3)
p.x = 6; p.y = 9; p.z = 5
assert (p.x, p.y, p.z) == (6, 9, 5)

try:
  p = PointND(1,2)
  p.z = 3
except AttributeError:
  print 'Passed all tests'



--
Bob Gailer
919-636-4239
Chapel Hill NC

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to