[Python-Dev] Definining properties - a use case for class decorators?

Guido van Rossum guido at python.org
Tue Oct 18 03:55:48 CEST 2005

> > I looked at that, and now I believe it's actually *better* to mention
> > the property name twice, at least compared to Tim' s approach.

[Greg Ewing]
> I'm inclined to agree. Passing functions that you're not
> going to use as functions but just use the name of doesn't
> seem right.
> And in my version, it's not *really* redundant, since the
> name is only used to derive the names of the accessor methods.
> It doesn't *have* to be the same as the property name, although
> using anything else could justifiably be regarded as insane...

OK, so how's this for a radical proposal.

Let's change the property built-in so that its arguments can be either
functions or strings (or None). If they are functions or None, it
behaves exactly like it always has.

If an argument is a string, it should be a method name, and the method
is looked up by that name each time the property is used. Because this
is late binding, it can be put before the method definitions, and a
subclass can override the methods. Example:

class C:

    foo = property('getFoo', 'setFoo', None, 'the foo property')

    def getFoo(self):
        return self._foo

    def setFoo(self, foo):
        self._foo = foo

What do you think?

--Guido van Rossum (home page: http://www.python.org/~guido/)

More information about the Python-Dev mailing list