This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author eryksun
Recipients devkid, eryksun
Date 2015-01-20.01:08:38
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1421716118.95.0.0405463110133.issue23276@psf.upfronthosting.co.za>
In-reply-to
Content
>            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
History
Date User Action Args
2015-01-20 01:08:39eryksunsetrecipients: + eryksun, devkid
2015-01-20 01:08:38eryksunsetmessageid: <1421716118.95.0.0405463110133.issue23276@psf.upfronthosting.co.za>
2015-01-20 01:08:38eryksunlinkissue23276 messages
2015-01-20 01:08:38eryksuncreate