Returns a list with the selected field *attribute* or a list with the
        dictionaries of the selected field *attributes* for each :class:`Field`
        *nested* in the `Sequence`.

        The *attributes* of each :class:`Field` for containers *nested* in the
        `Sequence` are viewed as well (chained method call).

        :param str attributes: selected :class:`Field` attributes.
            Fallback is the field :attr:`~Field.value`.
        :keyword tuple fieldnames: sequence of dictionary keys for the selected
            field *attributes*. Defaults to ``(*attributes)``.
        :keyword bool nested: if ``True`` all :class:`Pointer` fields nested in the
            `Sequence` views their referenced :attr:`~Pointer.data` object field
            attributes as well (chained method call).

def view_fields(self, *attributes, **options):
        """ Returns a list with the selected field *attribute* or a list with the
        dictionaries of the selected field *attributes* for each :class:`Field`
        *nested* in the `Sequence`.

        The *attributes* of each :class:`Field` for containers *nested* in the
        `Sequence` are viewed as well (chained method call).

        :param str attributes: selected :class:`Field` attributes.
            Fallback is the field :attr:`~Field.value`.
        :keyword tuple fieldnames: sequence of dictionary keys for the selected
            field *attributes*. Defaults to ``(*attributes)``.
        :keyword bool nested: if ``True`` all :class:`Pointer` fields nested in the
            `Sequence` views their referenced :attr:`~Pointer.data` object field
            attributes as well (chained method call).
        """
        items = list()

        for index, item in enumerate(self):
            if is_container(item):
                # Container
                items.append(item.view_fields(*attributes, **options))
            elif is_pointer(item) and get_nested(options):
                # Pointer
                items.append(item.view_fields(*attributes, **options))
            elif is_field(item):
                # Field
                if attributes:
                    field_getter = attrgetter(*attributes)
                else:
                    field_getter = attrgetter('value')

                if len(attributes) > 1:
                    fieldnames = options.get('fieldnames', attributes)
                    items.append(dict(zip(fieldnames, field_getter(item))))
                else:
                    items.append(field_getter(item))
            else:
                raise MemberTypeError(self, item, index)
        return items