PyQt5: создание подкласса QTextCodec
У меня возникают проблемы с созданием подкласса QTextCodec в PyQt5 (в частности, 5.9.2, используя Python 3.7).
Я создал MWE, демонстрирующий проблему. Выполняем следующий код:
# -*- coding: utf-8 -*-
from PyQt5.QtCore import QTextCodec
class MyCodec(QTextCodec):
def __init__(self):
super().__init__()
self.inner_codec = QTextCodec.codecForName('UTF-8')
def name(self):
return b'My' + self.inner_codec.name()
def aliases(self):
return [b'My' + alias for alias in self.inner_codec.aliases()]
def mibEnum(self):
return self.inner_codec.mibEnum()
def convertFromUnicode(self, input, number, state):
return self.inner_codec.convertFromUnicode(input, number, state)
def convertToUnicode(self, chars, len, state):
return self.inner_codec.convertToUnicode(chars, len, state)
if __name__ == '__main__':
def main():
codec = QTextCodec.codecForName('MyUTF-8')
assert codec is None # MyUTF-8 not found!
mycodec = MyCodec() # error here
print(mycodec.fromUnicode('hello world!'))
main()
выдает ошибку
TypeError: PyQt5.QtCore.QTextCodec cannot be instantiated or sub-classed
QTextCodecs, по-видимому, особый вид зверя, где Qt берет на себя ответственность за их создание. Однако, согласно этому ответу Stackru, для регистрации их необходимо создать. В комментарии к этому ответу Джесси Халлама говорится, что в C++ кодек должен быть создан с помощьюnew
; но Python на самом деле не делает всего "стека" и "кучи".
Как мне продолжить?