'Delete attributes from a given item in a domain.
:type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
:param domain_or_name: Either the name of a domain or a Domain object
:type item_name: string
:param item_name: The name of the item whose attributes are being
deleted.
:type attributes: dict, list or :class:`boto.sdb.item.Item`
:param attributes: Either a list containing attribute names which
will cause all values associated with that attribute
name to be deleted or a dict or Item containing the
attribute names and keys and list of values to
delete as the value.  If no value is supplied,
all attribute name/values for the item will be
deleted.
:type expected_value: list
:param expected_value: If supplied, this is a list or tuple consisting
of a single attribute name and expected value. The list can be
of the form:
* [\'name\', \'value\']
In which case the call will first verify that the attribute "name"
of this item has a value of "value".  If it does, the delete
will proceed, otherwise a ConditionalCheckFailed error will be
returned. The list can also be of the form:
* [\'name\', True|False]
which will simply check for the existence (True) or
non-existence (False) of the attribute.
:rtype: bool
:return: True if successful'

def delete_attributes(self, domain_or_name, item_name, attr_names=None, expected_value=None):

    (domain, domain_name) = self.get_domain_and_name(domain_or_name)
    params = {'DomainName': domain_name, 'ItemName': item_name}
    if attr_names:
        if isinstance(attr_names, list):
            self._build_name_list(params, attr_names)
        elif (isinstance(attr_names, dict) or isinstance(attr_names, self.item_cls)):
            self._build_name_value_list(params, attr_names)
    if expected_value:
        self._build_expected_value(params, expected_value)
    return self.get_status('DeleteAttributes', params)
