Python: RuntimeError: super-classe de __init__() de %S n'a jamais été appelé

J'ai essayé de faire une opération (setParent) sur un objet en Python (une instance d'une classe qui hérite d'une autre classe - pour être précis, QtGui.QLabel), mais au cours de l'exécution d'erreur ci-dessus a été soulevée. L'objet lui-même a eu quelques champs avec le contenu réel (vérifié sur debug), mais à partir d'une raison que je ne pouvais pas "utiliser". Quelle est l'erreur et comment puis-je résoudre ce problème? Pour des informations supplémentaires, je dirais que l'objet a été renvoyé à partir d'une méthode statique avant j'ai essayé de faire cette opération.

La sous-classe a un __init__() fonction de ses propres:

def __init__(self, image, father):
        super(AtomicFactory.Image, self).__init__(father)
        self.raw_attributes = image.attributes
        self.attributes = {}
        father.addChild(self)
        self.update()

Maintenant, j'ai écrit un code similaire, simple, qui a eu le même message d'erreur sur la ligne widget.setParent(mw) lorsque la fenêtre a été déplacé.

#!/usr/bin/env python
import sys
import copy
from PyQt4 import QtCore, QtGui
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main_widget=QtGui.QWidget()
widget = QtGui.QPushButton('Test')
widget.resize(640, 480)
widget.setParent(main_widget)
widget.move(0, 0)
widget2=QtGui.QPushButton('Test2')
widget2.i=0
widget2.resize(600, 200)
widget2.setParent(main_widget)
widget2.move(640, 0)
def onResize(event):
print event
mw=copy.deepcopy(main_widget)
widget.setParent(mw)
widget2.setParent(mw)
widget.move(0, 0)
widget2.move(640, 480)
main_widget_width=main_widget.width()
widget_width=widget.width()
width2=main_widget_width-widget_width
height2=widget2.height()
widget2.resize(width2, height2)
widget2.move(640, 0)
main_widget.resizeEvent=onResize
def onClick():
size=(widget2.width(), widget2.height())
if(widget2.i%2==0):
widget2.resize(int(size[0]/2), int(size[1]/2))
else:
widget2.resize(size[0]*2, size[1]*2)
widget2.i+=1
QtCore.QObject.connect(widget, QtCore.SIGNAL('clicked()'), onClick)
main_widget.show()
sys.exit(app.exec_())

Quel était le problème?

Si votre classe dérivée de MyDerived a son propre __init__ essayez d'ajouter la ligne super(MyDerived, self).__init__().
Il n'. L'objet a été effectivement créé avant et a été utilisé amende. J'aurais également pu utiliser setParent() sans problèmes dans la phase initiale. Il a ensuite été inséré dans une liste et de la méthode statique que j'ai décrit ci-dessus "trouvé" dans la liste, puis renvoyé à une autre méthode statique. Lorsque ce dernier a essayé d'utiliser setParnet() sur celui-ci, l'erreur a été renvoyée. De toute façon, le __init__() fonction personnalisée de la sous-classe est:
def __init__(self, image, père): super(AtomicFactory.Image, self).__init__(père) de soi.raw_attributes = image.les attributs de l'auto.attributes = {} père.addChild(self) self.mise à jour()
Pieters Merci, en fait
Qu'est-ce que votre sous-classe? Est-il AtomicFactory.Image, ou quelque chose d'autre?

OriginalL'auteur Tomer | 2012-09-05