Python Glossary English

все Python 3codecsпонятие

codecs.IncrementalDecoder

инкрементальные кодеки

Базовый класс инкрементальных декодировщиков: decode(data, final=False) копит неполный хвост между вызовами, reset() и getstate() управляют состоянием.

Синтаксис

class MyDecoder(codecs.IncrementalDecoder):
    def decode(self, input, final=False): ...

Сам по себе он ничего не декодирует: decode у базового класса бросает NotImplementedError. Готовый декодировщик берут через getincrementaldecoder, а наследуются, только когда пишут свой кодек. Такой же механизм внутри io.TextIOWrapper — поэтому open(..., encoding=...) корректно читает UTF-8 блоками. getstate() показывает, сколько байтов ждёт продолжения: (b'\xd0', 0) — половина буквы.

Примеры

import codecs
dec = codecs.getincrementaldecoder('utf-8')()
print(repr(dec.decode(b'\xd0')), dec.getstate())  # → '' (b'\xd0', 0)
print(dec.decode(b'\xb6'))  # → ж
print(isinstance(dec, codecs.IncrementalDecoder))  # → True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности