A descriptor modifier which allows a setattr to succeed even if __get__ is defined.
    
    Formally, this turns a data descriptor into a non-data descriptor. Discards
    the implementation of __set__ and __delete__ if it exists, so be wary when
    not using with ``property``.

def replaceable(decorator):
    """A descriptor modifier which allows a setattr to succeed even if __get__ is defined.
    
    Formally, this turns a data descriptor into a non-data descriptor. Discards
    the implementation of __set__ and __delete__ if it exists, so be wary when
    not using with ``property``.
    """
    def decorate(fn, *args, **kwargs):
        parent = decorator(fn, *args, **kwargs)
        #doc = _add_msg(getattr(parent, '__doc__', None), '*@replaceable*')
        doc = getattr(parent, '__doc__', None)
        return _replaceable(parent, doc)
    return decorate