On Jan 23, 12:45 pm, Arnaud Delobelle <arno...@gmail.com> wrote: > Hi all, > > It just occurred to me that there's a very simple but slightly > different way to implement properties: > > class PropertyType(type): > def __get__(self, obj, objtype): > return self if obj is None else self.get(obj) > def __set__(self, obj, val): > self.set(obj, val) > def __delete__(self, obj): > self.delete(obj) > > class Property(metaclass=PropertyType): > pass > > # Here is an example: > > class Test: > class x(Property): > "My property" > def get(self): > return "Test.x" > def set(self, val): > print("Setting Test.x to", val) > > # This gives: > > >>> t = Test() > >>> t.x > 'Test.x' > >>> t.x = 42 > > Setting Test.x to 42>>> Test.x > <property 'x'> > >>> Test.x.__doc__ > > 'My property' > > It also allows defining properties outside class scopes: > > class XPlus1(Property): > "My X Property + 1" > def get(self): > return self.x + 1 > def set(self, val): > self.x = val - 1 > > class A: > def __init__(self): > self.x = 0 > x_plus_one = XPlus1 > > class B: > def __init__(self): > self.x = 2 > x_plus_one = XPlus1 > > >>> a = A() > >>> b = B() > >>> a.x > 0 > >>> a.x_plus_one > 1 > >>> b.x_plus_one > > 3 > > I don't know why one would want to do this though :) > > -- > Arnaud
Nice idea. What would be the python2.7 version (adding __metaclass__=PropertyType didn't help) ? Many thanks -- http://mail.python.org/mailman/listinfo/python-list