У меня проблемы при создании подкласса QTextCode c в 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 становится владельцем их создания. В соответствии с этим StackOverflow ответом , однако, они должны быть созданы для регистрации. В комментарии к этому ответу Джесси Халлам говорится, что в C ++ код c должен быть создан с помощью new
; но Python на самом деле не делает всего "стека" и "кучи".
Как мне поступить?