'Remove attribute or a list of attributes from object.
Args:
key (str): An Attribute key to remove.
raise_exception (bool, optional): If set, not finding the
Attribute to delete will raise an exception instead of
just quietly failing.
category (str, optional): The category within which to
remove the Attribute.
accessing_obj (object, optional): An object to check
against the `attredit` lock. If not given, the check will
be skipped.
default_access (bool, optional): The fallback access to
grant if `accessing_obj` is given but there is no
`attredit` lock set on the Attribute in question.
Raises:
AttributeError: If `raise_exception` is set and no matching Attribute
was found matching `key`.'

def remove(self, key, raise_exception=False, category=None, accessing_obj=None, default_access=True):

    for keystr in make_iter(key):
        attr_objs = self._getcache(keystr, category)
        for attr_obj in attr_objs:
            if (not (accessing_obj and (not attr_obj.access(accessing_obj, self._attredit, default=default_access)))):
                try:
                    attr_obj.delete()
                except AssertionError:
                    pass
                finally:
                    self._delcache(key, category)
        if ((not attr_objs) and raise_exception):
            raise AttributeError
