'read([fields])
Reads the requested fields for the records in ``self``, low-level/RPC
method. In Python code, prefer :meth:`~.browse`.
:param fields: list of field names to return (default is all fields)
:return: a list of dictionaries mapping field names to their values,
with one dictionary per record
:raise AccessError: if user has no read rights on some of the given
records'

@api.multi
def read(self, fields=None, load='_classic_read'):

    self.check_access_rights('read')
    fields = self.check_field_access_rights('read', fields)
    (stored, inherited, computed) = ([], [], [])
    for name in fields:
        field = self._fields.get(name)
        if field:
            if field.store:
                stored.append(name)
            elif field.base_field.store:
                inherited.append(name)
            else:
                computed.append(name)
        else:
            _logger.warning("%s.read()    with    unknown    field    '%s'", self._name, name)
    self._read_from_database(stored, inherited)
    result = []
    name_fields = [(name, self._fields[name]) for name in ((stored + inherited) + computed)]
    use_name_get = (load == '_classic_read')
    for record in self:
        try:
            values = {'id': record.id}
            for (name, field) in name_fields:
                values[name] = field.convert_to_read(record[name], record, use_name_get)
            result.append(values)
        except MissingError:
            pass
    return result
