super().__init__()的解析和作用

发现自己对类的使用还是不熟悉,也不够充分理解。
使用AI查了下类中super().__init__()的作用。

解析如下:

在 Python 中,super() 函数是一个内置函数,用于获取一个类的超类(即父类)的对象。
当你在一个子类的构造方法 (__init__) 中调用 super().__init__() 时,它会自动调用父类的同名构造方法 (__init__),允许你初始化父类的属性或执行父类中定义的一些初始化行为。

例如,假设你有一个名为 Animal 的基类和一个名为 Dog 的子类:

class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # 调用父类的初始化方法,传入名字参数
        self.breed = breed  # 初始化子类特有的属性

Dog 类的构造方法中,super().__init__(name) 表示当创建 Dog 类的实例时,会先调用 Animal 类的 __init__ 方法,将 name 传递给父类,然后 Dog 类再继续执行后续的初始化操作。这样可以确保父类和子类的属性都得到了正确初始化。

简单地说,super().__init__()的作用就是在继承的子类中,执行父类的初始化方法。

但是,在买的书籍看到以下的代码:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPainter,QPen,QColor
from PyQt5.QtCore import Qt
import sys

class Demo(QWidget):
    def __init__(self, parent=None): # parent=None表示如果没有父窗口,则创建一个新的顶级窗口。
        super(Demo,self).__init__(parent) # parent=None表示如果没有父窗口,则创建一个新的顶级窗口。
        self.resize(300,300)
    def paintEvent(self,event):
        painter =QPainter(self)
        pen = QPen()
        painter.setPen(pen)
        painter.drawLine(80,250,200,10)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Demo()
    window.show()
    sys.exit(app.exec())

其中这句代码,想了半天也还是无法理解。

super(Demo,self).__init__(parent)

于是,继续查询,得到的解答如下:

super(Demo, self).__init__(parent) 这行代码在 Python 中用于子类调用父类的构造函数,特别是在使用多继承的情况下。

super().__init__(parent) 则是一个简洁形式,当子类只有一个父类,或者没有明确指定父类(即只有一个继承层次)时,可以省略类名,super() 会自动识别当前类的直接父类。

  • 如果子类有多个父类(多继承),super(Demo, self) 明确指定了调用哪个父类的构造函数,避免了名称冲突可能带来的问题。
  • 如果只有一个父类,使用 super() 可以简化代码,但此时不指定父类名也是可行的,因为Python解释器会自动找到正确的构造函数。

简单地说,super(Demo,self).__init__(parent)super().__init__()其实是一个意思。

相关推荐

  1. super().__init__()解析作用

    2024-06-18 05:52:03       34 阅读
  2. 解释Hibernate框架作用与JDBC区别

    2024-06-18 05:52:03       32 阅读
  3. 解释Servlet过滤器作用用法

    2024-06-18 05:52:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 05:52:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 05:52:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 05:52:03       87 阅读
  4. Python语言-面向对象

    2024-06-18 05:52:03       96 阅读

热门阅读

  1. awtk界面实现下拉屏功能

    2024-06-18 05:52:03       40 阅读
  2. linux 压缩命令之tar工具的基本使用

    2024-06-18 05:52:03       37 阅读
  3. 【Linux】I/O多路复用

    2024-06-18 05:52:03       37 阅读
  4. 微调大模型 - 面向学术论文的AI大模型

    2024-06-18 05:52:03       29 阅读
  5. MySql修改最大连接数

    2024-06-18 05:52:03       40 阅读
  6. 系统安全!

    2024-06-18 05:52:03       32 阅读
  7. 2.负载压力测试

    2024-06-18 05:52:03       29 阅读
  8. 工具清单 - IDE工具

    2024-06-18 05:52:03       44 阅读
  9. 随笔——顺序表专题

    2024-06-18 05:52:03       129 阅读
  10. Compose 可组合项 - 抽屉式导航栏 Drawer

    2024-06-18 05:52:03       33 阅读
  11. CentOS:安装NodeJs

    2024-06-18 05:52:03       29 阅读