python - 调用不带参数的超级初始化方法
问题描述
我对方法有疑问super().__init__()
。根据 W3SCHOOLS 的定义和用法(超级)是:
该
super()
函数用于访问父类或兄弟类的方法和属性。该
super()
函数返回一个表示父类的对象。
但是我真的不明白为什么以及在哪里可以使用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_())
解决方案
并非每个属性都传递给构造函数 - 有些可能是在构造函数中分配了默认值的私有属性。此外,父类的构造函数可能会做一些事情,而不仅仅是分配属性,例如设置缓存。没有super().__init__()
,它们将无法运行。
推荐阅读
- c# - 雪花中的查询超时问题
- android - Air-Adb: Error "Cannot run program "bash.exe": CreateProcess error=2, The system cannot find the file specified)
- python - 通过单击按钮更改另一个页面中的标签
- python - Python custom exception not giving message in proper syntax
- c# - Adding a ListView on top of MapView in Xamarin Android using C# (Not Xml)
- java - 字符串中的日期到日期中的日期转换
- apache-zookeeper - zookeeper 命令行界面详细文档在哪里?
- xamarin.forms - xamarin.forms 的弹出 Nuget
- flutter - 如何在颤动的列小部件内添加选项卡
- excel - 在 Excel 数据透视表中计算百分比