Mam klasę okna dialogowego, która dziedziczy klasę python-generowaną przez pyside-uic, ale moim problemem jest to, że nie można jej rozszerzyć o dodanie innej klasy bazowej.PySide, PysideUIC i wiele dziedziczenia
import sys
from PySide import QtGui
from mi_ui import Ui_Dialog
class Worker(object):
def __init__(self):
super(Worker, self).__init__()
self.data = 1
class MainDialog(QtGui.QDialog, Ui_Dialog, Worker):
def __init__(self):
super(MainDialog, self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dlg = MainDialog()
print dlg.data
dlg.show()
sys.exit(app.exec_())
Kiedy próbuję przedłużyć MainDialog
z Worker
, super nie nazywają Worker
„s __init__
i dlg.data druku nie dlatego, że "AttributeError: 'MainDialog' obiekt ma bez atrybutu 'dane'"
Moja jedyna praca wydaje się ignorować super i wywoływać ręcznie każdy __init__
.
QtGui.QDialog.__init__(self)
Worker.__init__(self)
Czy to moje jedyne rozwiązanie?
To jest dla Pythona 2.7.
Jeśli chodzi o moje doświadczenie jest zaniepokojony, 'super()' nie działa z owijarki PySide do Qt, i nie wierzę, że PyQt tu jest inaczej. Dlatego ręczne wywoływanie '__init__'s może być twoim jedynym sposobem. Tylko pamiętaj, aby unikać (lub obejść) diamentowych spadków. – quazgar