PySide2 (5.11.x): невозможно назвать тип (QtWidgets.QWidget) .__ new__ в Python 2.7 - PullRequest
0 голосов
/ 14 сентября 2018

У нас есть метакласс, основанный на 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 изменилось, но я не уверен, что это ошибка или наш код просто некорректен, и мы можем что-то настроить, чтобы он заработал.

...