code: def register_property(self, name, dtype, default, **kwargs):
          
          if name in self._properties:
              raise ValueError(('Property %s is already registered '
                  'on this cube object.') % name)
  
          P = self._properties[name] = AttrDict(name=name,
              dtype=dtype, default=default)
  
          #if not hasattr(HyperCube, name):
          if not HyperCube.__dict__.has_key(name):
                  # Create the descriptor for this property on the class instance
              setattr(HyperCube, name, PropertyDescriptor(record_key=name, default=default))
  
          # Set the descriptor on this object instance
          setattr(self, name, default)
  
          # Should we create a setter for this property?
          setter = kwargs.get('setter_method', True)
          setter_name = hcu.setter_name(name)
  
          # Yes, create a default setter
          if isinstance(setter, types.BooleanType) and setter is True:
              def set(self, value):
                  setattr(self,name,value)
  
              setter_method = types.MethodType(set, self)
              setattr(self, setter_name, setter_method)
  
              # Set up the docstring, using the supplied one
              # if it is present, otherwise generating a default
              setter_docstring = kwargs.get('setter_docstring', None)
              getattr(setter_method, '__func__').__doc__ = \
                  """ Sets property %s to value. """ % (name) \
                  if setter_docstring is None else setter_docstring
  
          elif isinstance(setter, types.MethodType):
              setattr(self, setter_name, setter)
          else:
              raise TypeError, ('setter keyword argument set',
                  ' to an invalid type %s' % (type(setter)))
  
          return P
docs: Registers a property with this Solver object
  
          .. code-block:: python
  
              cube.register_property("reference_frequency", np.float64, 1.4e9)
  
          Parameters
          ----------
          name : str
              The name of this property.
          dtype : Numpy data type
              Numpy data type
          default : Should be convertable to dtype
              Default value for this value