'Internal implementation of instance attribute access for the
``BasicPropertyDescriptor`` getter.
If the value has not been explicitly set by a user, return that
value. Otherwise, return the default.
Args:
obj (HasProps) : the instance to get a value of this property for
Returns:
object
Raises:
RuntimeError
If the |HasProps| instance has not yet been initialized, or if
this descriptor is on a class that is not a |HasProps|.'

def _get(self, obj):

    if (not hasattr(obj, '_property_values')):
        raise RuntimeError(("Cannot    get    a    property    value    '%s'    from    a    %s    instance    before    HasProps.__init__" % (self.name, obj.__class__.__name__)))
    if (self.name not in obj._property_values):
        return self._get_default(obj)
    else:
        return obj._property_values[self.name]
