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 <rep...@bugs.python.org> <http://bugs.python.org/issue23276> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com