def read(self, entity=None, attrs=None, ignore=None, params=None):
        """Provide a default value for ``entity``.

        By default, ``nailgun.entity_mixins.EntityReadMixin.read provides a
        default value for ``entity`` like so::

            entity = type(self)()

        However, :class:`OverrideValue` requires that an
        ``smart_class_parameter`` or ``smart_varaiable`` be provided, so this
        technique will not work. Do this instead::

            entity = type(self)(
                smart_class_parameter=self.smart_class_parameter)
            entity = type(self)(smart_variable=self.smart_variable)

        """
        # read() should not change the state of the object it's called on, but
        # super() alters the attributes of any entity passed in. Creating a new
        # object and passing it to super() lets this one avoid changing state.
        if entity is None:
            if hasattr(self, 'smart_class_parameter'):
                entity = type(self)(
                    self._server_config,
                    # pylint:disable=no-member
                    smart_class_parameter=self.smart_class_parameter,
                )
            elif hasattr(self, 'smart_variable'):
                entity = type(self)(
                    self._server_config,
                    # pylint:disable=no-member
                    smart_variable=self.smart_variable,
                )
        if ignore is None:
            ignore = set()
        ignore.update(['smart_class_parameter', 'smart_variable'])
        return super(OverrideValue, self).read(entity, attrs, ignore, params)
Provide a default value for ``entity``.

        By default, ``nailgun.entity_mixins.EntityReadMixin.read provides a
        default value for ``entity`` like so::

            entity = type(self)()

        However, :class:`OverrideValue` requires that an
        ``smart_class_parameter`` or ``smart_varaiable`` be provided, so this
        technique will not work. Do this instead::

            entity = type(self)(
                smart_class_parameter=self.smart_class_parameter)
            entity = type(self)(smart_variable=self.smart_variable)