Using sip.wrappertype as metaclass base does not work
    Giuseppe Corbelli 
    corbelligiuseppe at mesdan.it
       
    Wed Nov  4 11:10:00 GMT 2020
    
    
  
Hi all
quite interesting and obscure (for me) is this behaviour that I found to 
be happening on:
Python 3.8.5 / PyQt 5.15.1 / Qt 5.14.2 / sip 4.19.24 / Debian x64
--- NOT WORKING ---
import sip
import PyQt5.QtCore
class CQtSingletonT(sip.wrappertype):
     pass
class CQtSingleton(PyQt5.QtCore.QObject, metaclass=CQtSingletonT):
     pass
if __name__ == '__main__':
     s = CQtSingleton()
TypeError: metaclass conflict: the metaclass of a derived class must be 
a (non-strict) subclass of the metaclasses of all its bases
--- NOT WORKING ---
--- WORKING ---
import sip
import PyQt5.QtCore
class CQtSingletonT(type(PyQt5.QtCore.QObject)):
     pass
class CQtSingleton(PyQt5.QtCore.QObject, metaclass=CQtSingletonT):
     pass
if __name__ == '__main__':
     s = CQtSingleton()
--- WORKING ---
What? sip.wrappertype IS the type(QObject) so I'm at loss here.
Note that both versions work well with
Python 3.5.4 / PyQt 5.10.1 / Qt 5.11.2 / sip 4.19.13
Can somebody shed some light on this? I admit I have no idea on what's 
going on (except thinking that the metaclass resolution algorithm is 
getting fooled somehow, but this does not help much).
Thanks
-- 
Giuseppe Corbelli
    
    
More information about the PyQt
mailing list