parent()还是super()来获取父对象?

2024-09-27 00:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两门课:

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

以下是我的父类和子类的开始:

家长:

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

        somevar=1200

        self.ChildItem=ChildClass()
        self.ChildItem.Start(somevar)

孩子:

^{pr2}$

然而,即使我没有错误,最后一行也不会产生任何结果。在

我在几个例子中看到,super()可以用来调用父方法,所以我假设这是我的情况下的一个解决方案。然而,我也没能成功。在

我在理解super()时遇到了很多困难,当我只想做一件简单的事情时,它总是涉及到诸如多重继承之类的复杂概念。在


Tags: 对象实例方法self属性init子类super
2条回答

Qt术语中的Parent不是python术语中的Parent,from docs

Returns a pointer to the parent object.

QObjects organize themselves in object trees. When you create a QObject with another object as parent, the object will automatically add itself to the parent's children() list.

但是这里的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)

相关问题 更多 >

    热门问题