У нас есть метакласс, основанный на type(QtWidgets.QWidget)
- который разрешается до Shiboken.ObjectType
- который у нас был в производстве, начиная с PySide / Qt4, который ломается в версиях PySide2 на Pypy (5.11.x).Более ранние альфа-версии PySide2 (2.0.0 ~ alpha0) не имеют этой проблемы.
Если вы вызываете следующее из Python 2.7, используя версию PySide2 5.11.x, вы увидите, что она выглядит какShiboken.ObjectType
передает аргументы, переданные type.__new__
, что недопустимо.
Эта строка кода придумана только для иллюстрации проблемы, отсюда и пустые аргументы name, parent и class_dict, ипередавая тип как есть.В нашем производственном коде это будет метакласс, который мы определяем, а остальные аргументы будут передаваться из входных аргументов / kwargs:
type(QtWidgets.QWidget).__new__(type(QtWidgets.QWidget), "", (), {})
В PySide2 5.11.x возникает следующее:
TypeError: Shiboken.ObjectType.__new__(Shiboken.ObjectType) is not safe, use type.__new__()
В PySide / Qt4 или PySide2 2.0.0 ~ alpha0 происходит правильное возвращение:
<class '__main__.'>
Кто-нибудь сталкивался с этим раньше?Мы делаем что-то в корне неправильно, или мы можем использовать обходной путь?Что-то в shiboken2 изменилось, но я не уверен, что это ошибка или наш код просто некорректен, и мы можем что-то настроить, чтобы он заработал.