Python 要获取父对象,请使用parent()或super()?

Python 要获取父对象,请使用parent()或super()?,python,pyside,qtgui,Python,Pyside,Qtgui,我有两门课: 第一个类(父类)实例化方法中的子类。 我试图修改子类中的父对象属性。(这些对象是PyQTQWidgets) 以下是我的家长和孩子课程的开始: 家长: class ParentClass(QtGui.QMainWindow): def __init__(self, parent=None): super(ParentClass, self).__init__() somevar=1200 self.ChildItem=Chi

我有两门课:

第一个类(父类)实例化方法中的子类。 我试图修改子类中的父对象属性。(这些对象是PyQT
QWidget
s)

以下是我的家长和孩子课程的开始:

家长:

class ParentClass(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(ParentClass, self).__init__()

        somevar=1200

        self.ChildItem=ChildClass()
        self.ChildItem.Start(somevar)
class ChildClass(QtGui.QWidget):
    def Start(self, var):
        super(ChildClass, self).__init__(self)

        self.parent().resize(var,var)
子项:

class ParentClass(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(ParentClass, self).__init__()

        somevar=1200

        self.ChildItem=ChildClass()
        self.ChildItem.Start(somevar)
class ChildClass(QtGui.QWidget):
    def Start(self, var):
        super(ChildClass, self).__init__(self)

        self.parent().resize(var,var)
但是,即使我没有错误,最后一行也不会产生任何结果

我在几个例子中看到,可以使用
super()
调用父方法,因此我认为这是我的案例的解决方案。然而,我也无法让它工作


我在理解
super()
时遇到了很多麻烦,当我只想做一件简单的事情时,它总是会陷入复杂的概念中,比如多重继承。

Qt术语中的父级在python术语中不是父级:

返回指向父对象的指针

QoObject在对象树中组织它们自己。当您使用另一个对象作为父对象创建QObject时,该对象将自动将自身添加到父对象的子对象()列表中

但这里的parent在Qt术语中是这个对象所属的对象,这与python继承无关

对于python继承,您需要
super

super(ParentClass, self).method()

在单一继承的情况下,这是微不足道的。

这里的问题与
super
或继承无关。通过继承,父/子关系是类之间的关系。但在您的示例中,
ChildClass
不会继承
ParentClass
,因此这并不相关

不过,Qt中还有另一种父/子关系,即实例之间的关系。小部件的构造函数有一个参数,允许您传入对父对象(通常是另一个小部件实例)的引用。但是,该参数是可选的,因此如果不显式设置它,那么在之后调用
parent()
将只返回
None

示例代码中的具体错误是,从未为该子级指定父级

下面是您的示例的样子:

class ParentClass(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(ParentClass, self).__init__()    
        # pass in "self" as the parent
        self.ChildItem = ChildClass(self)
        self.ChildItem.Start(1200)

class ChildClass(QtGui.QWidget):
    def Start(self, var):
        self.parent().resize(var, var)

如果你没有(而且你没有)多重继承,
super
没有什么复杂的。什么是
self.parent()
?嗯,好吧,我不知道parent()是Qt的东西。这解释了很多。我曾尝试对此做过一些研究,但在谷歌上搜索“parent()”就像搜索“parent”,这让事情变得更难。谢谢你的帮助。@OdgyGsf是的,在谷歌上寻找这样的通用TEM可能不会有结果。如果您确定这个方法存在,最好在google之前先搜索您的库文档。@OdgyGsf您在哪里调用它?super中的第一个参数是您调用它的当前类,我刚才给出了一个示例。您还需要通过super调用以避免调用重载版本,您确定它是您需要的吗?@OdgyGsf您确定您的类在python中实际上是父类和子类吗?子类是子类。