все Python 3codecsпонятие
codecs.Codec
базовые классы
Базовый класс кодека без состояния: методы encode и decode возвращают пару (результат, сколько поглощено). Наследуют при написании собственного кодека.
Синтаксис
class MyCodec(codecs.Codec):
def encode(self, input, errors='strict'): ...
В прикладном коде этот класс не нужен: кодировать и декодировать — str.encode и bytes.decode. Методы базового класса бросают NotImplementedError. Контракт строгий: вернуть надо кортеж из двух элементов, и второй — длина обработанного ВХОДА, а не выхода. Чтобы кодек нашёлся по имени, его ещё надо зарегистрировать через codecs.register.
Примеры
import codecs
class Upper(codecs.Codec):
def encode(self, text, errors='strict'):
return text.upper().encode('ascii', errors), len(text)
def decode(self, data, errors='strict'):
return bytes(data).decode('ascii', errors), len(data)
print(Upper().encode('abc')) # → (b'ABC', 3)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности