Alfred Krohmer added the comment:

> I'd expect a TypeError because of the extra cls argument. It's already a 
> bound method.

Sorry, that was a typo.

> Consider making a playlist class that *has* a SQL table, not one that *is* a 
> SQL table, i.e. use composition instead of inheritance. That sidesteps the 
> incompatible metaclasses.

That would be indeed a solution, but not for the original problem.

I think I have an example now that makes my point clear.

The following code works as it should:

import traceback
import sys

class MyMeta(type):
    def __setattr__(cls, key, value):
        print("OK")

class MyClass(metaclass=MyMeta):
    pass

MyClass.abc = 12 # outputs "OK"
try:
    print(MyClass.abc)
except:
    traceback.print_exc(file=sys.stdout) # exception comes here as expected

type.__setattr__(MyClass, 'test', 42) # outputs nothing
print(MyClass.test) # outputs "42"

If I get this right, this should be **valid code** (and it should **not** be a 
bug, that this actually works).

However, above define MyMeta like following:

from PyQt5.QtMultimedia import QMediaPlaylist

class MyMeta(type(QMediaPlaylist)):
    def __setattr__(cls, key, value):
        print("OK")

And you get:

TypeError: can't apply this __setattr__ to PyQt5.QtCore.pyqtWrapperType object

I think that this actually **is** unexpected behaviour. I'm **not** trying to 
apply __setattr__ to PyQt5.QtCore.pyqtWrapperType but to MyClass!

----------

_______________________________________
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

Reply via email to