python类继承定义初始化位?

python类继承定义初始化位?,python,inheritance,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.BitNumb

我将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()
这对我来说非常有意义,我告诉我的第二个类“看,你继承了这个类,所以她知道的一切,你也知道”,但我随后得到了这个消息错误:

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

任何帮助都将不胜感激


非常感谢

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

这破坏了python确定应该使用哪个
\uuuuu init\uuuuu
方法、QWidget中的方法或来自
主窗口的方法的策略:

main = MainWindow()
myValue = main.Fn_GetSpnBitsValue()
MainWindow
定义告诉python将
MainWindow
置于
QWidget
之前。 当您定义
BitsWindow(QWidget,MainWindow)
时,您给予
QWidget
优先于
MainWindow
。 这两种策略相互冲突,这就是为什么会出现错误

因此,只需将类定义从

class BitsWindow(QtGui.QWidget, MainWindow):
...

FWIW,如果您真的愿意,您还可以保留冗余的
QWidget
继承,如果您更改顺序:

class BitsWindow(MainWindow, QWidget):
    ...
也应该有效

编辑:

然而,继承可能不是您真正想要的。 您只需从
main窗口的一个实例访问它,就可以得到该结果:

main = MainWindow()
myValue = main.Fn_GetSpnBitsValue()


您应该提到python版本和Qt绑定包(PySide、PyQt4、PyQt5)。谢谢。哈,当然可以!因为MainWindow已经从QtGui.QWidget继承!但现在我的问题是,我得到了所有的布局/按钮…我在第二节课上复制了我整个第一节课的内容,而我只想访问一个函数的结果。谢谢,我现在看得更清楚了。所以我只需要实例化我的类来访问其中的内容。这确实有道理。有一件事困扰着我,我正在访问的函数的结果与我在第一个类或第二个类中直接打印的结果不同。从我的第二个类访问Fn_GetSpnBitsValue()将始终返回微调器(1)的默认值,无论其中实际包含什么值。您好,您的答案仍然存在问题。main=MainWindow()myValue=main.Fn_GetSpnBitsValue()或main.Fn_GetSpnBitsValue()myValue=main.BitNumber这样做是在我的第一个类的新实例中获取myValue,而不是从现有的第一个类获取它:/
main.Fn_GetSpnBitsValue()
myValue = main.BitNumber