[Python-au] New Python Class Features

Daryl Tester Daryl.Tester@iocane.com.au
Fri, 17 Jan 2003 14:57:51 +1030


"Anthony Baxter" <anthony@interlink.com.au> wrote:

>> I'd recommend only using property for computed attributes (i.e. ones that
>> need a function call to calculate their value).  Most of the time you
don't
>> need them.

> The other reason for using them is for preconditions (check something
before
> getting/setting) or postconditions (do something after getting/setting)

The way I've always found to do this (caveat: I haven't dabbled much beyond
1.5.2) is to use the access attribute methods of the object.  e.g. off the
top of my head:

class foo:
  def __init__(self):
    self.attrs = { 'knob1': 11, 'dial2': 'overdrive' }

  def __getattr__(self, name):
    if self.attrs.has_key(name):
      return self.attrs[name]
    raise "What you talkin' about, Willis?"  # Should be an IndexError, but
not as entertaining.

  def __setattr__(self, name, value):
    raise "I'm a read only object, dagnabbit"

And so on ... (from memory, there was a caveat lurking here about
cyclic lookups, but I'm not in front of the appropriate computer at
the moment).  You can then do funky pre/post conditions once
you've intercepted the object's get/set methods.

--dt