Pyside6/Shiboken y Bug de ABCMeta
Esto es específico para el nuevo paquete Pyside6. Pyside2 no tiene este problema.
Al intentar crear una clase abstracta que combina clases JSON y QObject, Shiboken arroja el siguiente error:
c:\python\python39\lib\abc.py in __new__(mcls, name, bases, namespace, **kwargs)
104 """
105 def __new__(mcls, name, bases, namespace, **kwargs):
--> 106 cls = super().__new__(mcls, name, bases, namespace, **kwargs)
107 _abc_init(cls)
108 return cls
TypeError: Shiboken.ObjectType.__new__(JsonSettingsQtMeta) no es seguro, usa type.__new__()
Ejemplo corto:
from abc import ABCMeta
from dataclasses import dataclass
from PySide6.QtCore import QObject
class JsonSettingsQtMeta(ABCMeta, type(QObject)):
def __new__(mcls, name, bases, namespace, **kwargs):
cls = ABCMeta.__new__(mcls, name, bases, namespace, **kwargs)
return cls
class JsonDeserializable:
pass
@dataclass
class DesignVariableContainer(QObject, JsonDeserializable, metaclass=JsonSettingsQtMeta):
pass
He leído los siguientes errores, discusiones. Los intentos de una solución alternativa han fallado hasta ahora:
- https://stackoverflow.com/questions/66591752/metaclass-conflict-when-trying-to-create-a-python-abstract-class-that-also-subcl
- https://codereview.qt-project.org/gitweb?p=pyside/pyside-setup.git;a=commitdiff;h=cd6172063756a59e02f1a7857bc60a1737214ad1
- https://bugreports.qt.io/browse/PYSIDE-1051
- https://bugreports.qt.io/browse/PYSIDE-816
davy.ai
El problema está relacionado con el uso de Shiboken2 en combinación con PySide6 al intentar crear una clase abstracta que combina clases JSON y QObject. El mensaje de error indica que el método
ObjectType.__new__()
de Shiboken2 no es seguro y recomienda usartype.__new__()
en su lugar. Este problema es específico de PySide6 y no está presente en PySide2. Aún no se ha encontrado una solución alternativa posible, y el problema se ha reportado en el rastreador de errores de PySide6 como PYSIDE-1051 y PYSIDE-816. Puede encontrar más información y actualizaciones sobre el problema a través de los enlaces proporcionados.