首页 > 解决方案 > 调用不带参数的超级初始化方法

问题描述

我对方法有疑问super().__init__()。根据 W3SCHOOLS 的定义和用法(超级)是:

但是我真的不明白为什么以及在哪里可以使用super().__init__()没有任何参数的方法__init__(因为,即使没有super__init__只要我们在括号中插入父类的名称,就会调用父类的方法)。

我是面向对象编程的新手,所以我只是想了解它是如何工作的!!!

为了帮助您理解我的问题,请参见下面的示例:

class Rectangle:
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def area1(self):
        return self.length * self.width

class Square(Rectangle):
    def __init__(self, length):
        super().__init__(length, length)

square = Square(4)
square.area()

这里我们使用它是因为我们需要self.length, self.width在 Rectangle 类上定义
(我们插入长度,长度)。

但是我不知道为什么我们在没有任何参数的情况下使用它,例如下一个示例。
因为我知道我们可以访问父类的方法和属性,而无需调用超级。

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
                
        self.lineEntry = QLineEdit(self)
        self.lineEntry.move(16,16)
        self.lineEntry.resize(200,40)
  
        self.setGeometry(50,50,320,200)
        self.setWindowTitle("QLineEdit Example")
        self.show()
        

        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())

标签: pythonclassinitsuper

解决方案


并非每个属性都传递给构造函数 - 有些可能是在构造函数中分配了默认值的私有属性。此外,父类的构造函数可能会做一些事情,而不仅仅是分配属性,例如设置缓存。没有super().__init__(),它们将无法运行。


推荐阅读