Exercise: Property from class decoratorΒΆ

A property is a way of providing a class with virtual or protected attributes. They can be a good way of hiding and protecting implementation details. The area property of a rectangle is a good example of a read-only property.

Some properties are both read and write. There may also be a case for write-only properties. One can also delete a property. To help the programmer, a property can have a docstring.

The signature for property is

property(fget=None, fset=None, fdel=None, doc=None)

The exercise is to make a decorator that simplifies the creation of complex property attributes. The interface I suggest is

class MyClass(object):

     @property_from_class
     class my_property(object):
         '''This is to be the doc string for the property.'''

         def fget(self):
             pass            # code goes here

         def fset(self):
             pass            # code goes here

         def fdel(self):
             pass            # code goes here

Any or all of fget, fset, fdel can be omitted, as can the docstring. It should be an error to ‘use the wrong keyword’.