python类继承def __init位?

时间:2014-08-31 11:50:57

标签: python inheritance

我正在使用Python 3和PyQt4以及:

我有头等舱:

class MainWindow(QtGui.QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.initUI()

中包含此功能:

def Fn_GetSpnBitsValue(self):
        print (self.SpnBits.value())
        self.BitNumber =self.SpnBits.value()
        print(self.BitNumber)
        return self.BitNumber

你可以看到我返回在这个类中创建的一个微调器的值 现在我想访问这个变量" self.BitNumber"从另一个班级。 在其他语言中,我只是简单地编写myValue = MainWindow.self.BitNumber,但它似乎在python中不那么容易,所以我看看类继承,所以我的第二个类继承了我的第一个...

我很想写这样写......:

class BitsWindow(QtGui.QWidget, MainWindow):   
    def __init__(self):
        super(BitsWindow, self).__init__()
        self.initUI2()

这对我来说是完美的感觉,我告诉我的第二堂课#34;看你从这门课继承,所以她知道的一切,你也知道#34;但我收到此消息错误:

 class BitsWindow(QtGui.QWidget, MainWindow):
TypeError: Cannot create a consistent method resolution
order (MRO) for bases QWidget, MainWindow
实际上,对我来说真的没什么感觉。通过在网络上进一步观察,我认为理解关键在于:

def __init__(self):
        super(BitsWindow, self).__init__()
        self.initUI2()

但我真的很难理解这个概念,尽管有很多教程和论坛答案,但我不确定这是做什么的。 (也许,可能,没有找到好的。)

非常感谢任何帮助;

非常感谢!

1 个答案:

答案 0 :(得分:1)

问题是,BitsWindow继承自QWidgetMainWindow,即使MainWindow已经是QWidget

这破坏了python的策略,以确定哪个例如应使用哪种__init__方法,QWidgetMainWindow中的方法:

MainWindow定义告诉python在MainWindow之前取QWidget。 定义BitsWindow(QWidget, MainWindow)后,您QWidget优先于MainWindow。 这两个策略相互冲突,这就是您收到错误的原因。

因此,只需从

更改您的班级定义即可
class BitsWindow(QtGui.QWidget, MainWindow):
...

class BitsWindow(MainWindow):
...

FWIW,如果您真的想要,也可以保留冗余QWidget继承,如果您更改顺序:

class BitsWindow(MainWindow, QWidget):
    ...

也应该有用。

修改

然而,继承实际上并不是你想要的。 您只需从MainWindow

的实例访问该结果即可获得该结果
main = MainWindow()
myValue = main.Fn_GetSpnBitsValue()

main.Fn_GetSpnBitsValue()
myValue = main.BitNumber