eryksun added the comment:
> super(type, cls).__setattr__(key, value)
In your case, super(type, cls).__setattr__ references object.__setattr__.
>>> super(type, MyClass).__setattr__.__objclass__
<class 'object'>
That's from the method resolution order (__mro__):
>>> print(*MyMeta.__mro__, sep='\n')
<class '__main__.MyMeta'>
<class '__main__.MetaA'>
<class '__main__.MetaB'>
<class 'type'>
<class 'object'>
Instead use super(MyMeta, cls), or in Python 3 just use super() in a method
(under the hood the function uses a closure variable named __class__).
>>> super(MyMeta, MyClass).__setattr__.__objclass__
<class 'type'>
> type.__setattr__(MyClass, 'test', 42)
The above won't work for a Qt subclass. You need __setattr__ from
sip.wrappertype.
>>> type.__setattr__(QtClass, 'test', 42)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't apply this __setattr__ to sip.wrappertype object
>>> print(*QtMeta.__mro__, sep='\n')
<class '__main__.QtMeta'>
<class '__main__.MetaA'>
<class 'sip.wrappertype'>
<class 'type'>
<class 'object'>
>>> super(QtMeta, QtClass).__setattr__.__objclass__
<class 'sip.wrappertype'>
>>> super(QtMeta, QtClass).__setattr__('test', 42)
>>> QtClass.test
42
----------
nosy: +eryksun
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue23276>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com