Eigenschaft funktioniert, weil QObject eine Metaklasse hat, die sich um sie kümmert. Zeuge dieses kleine Variation @ Quark Code ...:
from PyQt4.QtCore import QObject
def makec(base):
class X(base):
def __init__(self):
self.__x = 10
def get_x(self):
print 'getting',
return self.__x
def set_x(self, x):
print 'setting', x
self.__x = x
x = property(get_x, set_x)
print 'made class of mcl', type(X), issubclass(type(X), type)
return X
class old: pass
for base in (QObject, old):
X = makec(base)
x = X()
print x.x # Should be 10
x.x = 30
print x.x # Should be 30
läuft diese aussendet:
made class of mcl <type 'PyQt4.QtCore.pyqtWrapperType'> True
getting 10
setting 30
getting 30
made class of mcl <type 'classobj'> False
getting 10
30
den Unterschied? In der Klasse, die wirklich eine Legacy (Old-Type) -Klasse ist, die Metaclass ist das zweite Mal, ist classobj
(was keine Unterklasse des Typs ist) und Eigenschaften funktionieren nicht richtig (Zuweisung x.x
umgeht die Eigenschaft und nach dass bekommen x.x
nicht mehr die Eigenschaft auch nicht). Aber im ersten Fall, der Qt-Fall, gibt es eine andere Metaklasse, und es ist eine Unterklasse vom Typ (so ist es nicht richtig zu sagen, die Klasse "ist nicht neu-Stil"!), Und die Dinge funktionieren daher richtig.
Seltsam, vielleicht das Werkzeug, das wir den Code zu überprüfen, verwenden wird versteht es falsch ... –
Gemäß der PyQt-Dokumentation "In Versionen von PyQt vor Version 4.5 gab es Einschränkungen bei der Verwendung von Super mit PyQt-Klassen. Diese Einschränkungen gelten ab Version 4.5 nicht mehr." Wenn Sie eine Version vor 4.5 verwenden, ist das vielleicht das Problem? Wenn nicht, bin ich ratlos! (Quelle: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#super-and-pyqt-classes) –
Ich lief den gleichen Test auf meiner und es sagt mir das Gleiche Ich gehe weiter und nehme an, dass das Tool, das wir verwenden, nur verwirrt ist. Vielen Dank –