###
4.8.1.3 IncrementalDecoder Objects

The `IncrementalDecoder` class is used for decoding an input in multiple steps. It defines the following methods which every incremental decoder must define in order to be compatible with the Python codec registry.

class `IncrementalDecoder`( | [errors])

  Constructor for an `IncrementalDecoder` instance.

  All incremental decoders must provide this constructor interface. They are free to add additional keyword arguments, but only the ones defined here are used by the Python codec registry.

  The `IncrementalDecoder` may implement different error handling schemes by providing the errors keyword argument. These parameters are predefined:

  - `'strict'` Raise `ValueError` (or a subclass); this is the default.
  - `'ignore'` Ignore the character and continue with the next.
  - `'replace'` Replace with a suitable replacement character.

  The errors argument will be assigned to an attribute of the same name. Assigning to this attribute makes it possible to switch between different error handling strategies during the lifetime of the `IncrementalEncoder` object.

  The set of allowed values for the errors argument can be extended with `register_error()`.

`decode`( | object[, final])

  Decodes object (taking the current state of the decoder into account) and returns the resulting decoded object. If this is the last call to `decode` final must be true (the default is false). If final is true the decoder must decode the input completely and must flush all buffers. If this isn't possible (e.g. because of incomplete byte sequences at the end of the input) it must initiate error handling just like in the stateless case (which might raise an exception).

`reset`( | )

  Reset the decoder to the initial state.

The `StreamWriter` and `StreamReader` classes provide generic working interfaces which can be used to implement new encoding submodules very easily. See `encodings.utf_8` for an example of how this is done.