鱼C论坛

 找回密码
 立即注册
查看: 1710|回复: 2

[已解决]super().__init__() 两个括号里填写什么呢?

[复制链接]
发表于 2023-11-24 18:25:19 | 显示全部楼层 |阅读模式
25鱼币
下面代码内super().__init__()的括号内容该怎么理解 ,为什么一个()是子类+对象 另一个()是子类的变量

class MyMatplotlibFigure(FigureCanvasQTAgg):
    """
    创建一个画布类,并把画布放到FigureCanvasQTAgg
    """
    def __init__(self, width=10, heigh=10, dpi=100):
        plt.rcParams['figure.facecolor'] = 'r'  # 设置窗体颜色
        plt.rcParams['axes.facecolor'] = 'b'  # 设置绘图区颜色
        self.width = width
        self.heigh = heigh
        self.dpi = dpi
        self.figs = Figure(figsize=(self.width, self.heigh), dpi=self.dpi)
        super(MyMatplotlibFigure, self).__init__(self.figs)  # 在父类种激活self.fig, 否则不能显示图像
        self.axes = self.figs.add_subplot(111)
————————————————
版权声明:本文为CSDN博主「qd-hhkj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wuwei_201/article/details/106106387
最佳答案
2023-11-24 18:25:20
在给super()函数传递参数时,括号中填写的是当前子类的相关参数。在这种情况下,super().__init__()的第一个括号中填写的是子类本身的名称,即MyMatplotlibFigure类,第二个括号中填写的是子类对象的参数,即self.figs是通过MyMatplotlibFigure类创建的对象。

具体来说,在这段代码中,super(MyMatplotlibFigure, self).__init__(self.figs)中,第一个括号MyMatplotlibFigure表示子类本身,即MyMatplotlibFigure类;第二个括号self.figs表示子类对象的参数,即self.figs是通过MyMatplotlibFigure类创建的对象。

super().__init__()调用了父类(FigureCanvasQTAgg)的__init__()方法,并传递了相应的参数。这样做的目的是在子类的初始化过程中,先调用父类的初始化方法,以确保父类的属性和方法被正确初始化。

需要注意的是,super()是用来调用父类方法的特殊函数,它并不是父类的实例化对象。通过super().__init__()可以在子类中调用父类的初始化方法,完成父类属性的初始化工作。

希望能解答你的问题!

回复来自于CHAT-GPT。回复仅供参考,如有人工回答,最佳答案请优先选择人工

最佳答案

查看完整内容

在给super()函数传递参数时,括号中填写的是当前子类的相关参数。在这种情况下,super().__init__()的第一个括号中填写的是子类本身的名称,即MyMatplotlibFigure类,第二个括号中填写的是子类对象的参数,即self.figs是通过MyMatplotlibFigure类创建的对象。 具体来说,在这段代码中,super(MyMatplotlibFigure, self).__init__(self.figs)中,第一个括号MyMatplotlibFigure表示子类本身,即MyMatplotlibFigure类;第二个括号sel ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-24 18:25:20 | 显示全部楼层    本楼为最佳答案   
在给super()函数传递参数时,括号中填写的是当前子类的相关参数。在这种情况下,super().__init__()的第一个括号中填写的是子类本身的名称,即MyMatplotlibFigure类,第二个括号中填写的是子类对象的参数,即self.figs是通过MyMatplotlibFigure类创建的对象。

具体来说,在这段代码中,super(MyMatplotlibFigure, self).__init__(self.figs)中,第一个括号MyMatplotlibFigure表示子类本身,即MyMatplotlibFigure类;第二个括号self.figs表示子类对象的参数,即self.figs是通过MyMatplotlibFigure类创建的对象。

super().__init__()调用了父类(FigureCanvasQTAgg)的__init__()方法,并传递了相应的参数。这样做的目的是在子类的初始化过程中,先调用父类的初始化方法,以确保父类的属性和方法被正确初始化。

需要注意的是,super()是用来调用父类方法的特殊函数,它并不是父类的实例化对象。通过super().__init__()可以在子类中调用父类的初始化方法,完成父类属性的初始化工作。

希望能解答你的问题!

回复来自于CHAT-GPT。回复仅供参考,如有人工回答,最佳答案请优先选择人工
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-24 18:26:01 | 显示全部楼层
`super().__init__()`中的括号填写的是当前子类的参数。`super()`是一个特殊的函数,它用于调用父类的方法。在上述代码中,`super(MyMatplotlibFigure, self)`表示调用`MyMatplotlibFigure`的父类`FigureCanvasQTAgg`的`__init__`方法。

为什么要使用两个括号呢?第一个括号用于创建一个父类的实例对象,而第二个括号则是调用父类的`__init__`方法,并传递子类的参数。

具体地说,`super(MyMatplotlibFigure, self)`是创建了一个父类`FigureCanvasQTAgg`的对象,并将该对象赋值给`self`。然后,用这个对象调用父类的`__init__`方法,传递了子类的参数`self.figs`。

通过调用父类的`__init__`方法,可以确保在子类的初始化过程中也能执行父类的初始化操作,从而实现子类和父类的完整初始化。

完整的代码如下:
class MyMatplotlibFigure(FigureCanvasQTAgg):    """    创建一个画布类,并把画布放到FigureCanvasQTAgg    """    def __init__(self, width=10, heigh=10, dpi=100):        plt.rcParams = 'r'  # 设置窗体颜色        plt.rcParams = 'b'  # 设置绘图区颜色        self.width = width        self.heigh = heigh        self.dpi = dpi        self.figs = Figure(figsize=(self.width, self.heigh), dpi=self.dpi)        super(MyMatplotlibFigure, self).__init__(self.figs)  # 在父类种激活self.fig, 否则不能显示图像        self.axes = self.figs.add_subplot(111)
希望能解答你的疑问!
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表