es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

Tags:  , , ,

Answer

  1. Avatar for 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 usar type.__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.

Comments are closed.