Possible PEP: Improve classmethod/staticmethod syntax
Michele Simionato
mis6 at pitt.edu
Fri Jun 6 13:20:08 EDT 2003
imbosol at aerojockey.com (Carl Banks) wrote in message news:<60dfb6f6.0306041517.7c34ae85 at posting.google.com>...
>
> If you do this:
>
> def defineproperty(name,bases,clsdict):
> getter = clsdict.get('get',None)
> setter = clsdict.get('set',None)
> deller = clsdict.get('del',None)
> docstr = clsdict.get('__doc__',None)
> return property(getter,setter,deller,docstr)
>
>
> Then you can make a property metaclass, like this:
>
> class foo:
> "here's the properties doc string"
> __metaclass__ = defineproperty
> def get(self):
> return self.__foo
> def set(self,value):
> self.__foo = value
> def del(self):
> del self.__foo
>
>
> I've never used properties, but if I ever do, this is how I'm doing
> it. In fact, I would probably do this with static and class
> functions, too. (I would take the time to make a base class, though,
> so I wouldn't have to set __metaclass__ explicitly.)
Never post code without testing! ;) This will never work.
Besides, using a function instead of a metaclass does not work well
with respect to inheritance and should not be done, except in very special
cases.
> I think it should be the STANDARD Python way to define properties and other
> special descriptors.
>From Guido's essay, I got the impression that descriptors are verbose
because they should be called from metaclasses (both his metaclasses
examples autosuper and autoprop actually do that). Nevertheless, I don't
think a little syntactic sugar to have a nice notation without recurring
to metaclasses would be a bad idea.
Michele
More information about the Python-list
mailing list