问题描述
我有一个关于 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()
这里我们使用它是因为我们需要在Rectangle类
上定义self.length,self.width
(我们插入长度,长度)。
但是我不知道为什么我们像下一个例子那样在没有任何参数的情况下使用它。
因为我知道我们可以访问父类的方法和属性,而无需调用super。
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_())
解决方法
并非每个属性都传递给构造函数 - 有些可能是私有属性,在构造函数中分配了默认值。此外,父类的构造函数可能会做一些不只是分配属性的事情,比如设置缓存。没有 super().__init__()
,它们将无法运行。