As of Python2.5, StreamReader wraps (contains) a stream. It defines read and other respective methods to read the data from the stream and "decode" them. The class exposes all other methods of the stream instance.
Pseudocode of the codecs.StreamReader definition:
The decode method normally converts values of type str to unicode.
Codec modules will attach the decode method to the class definition derived from StreamReader during the initialization. An excerpt from encodings.utf_8.StreamReader:
See also: StreamWriter, StreamReaderWriter, StreamRecoder.