

このclassの中の `super(PlotCanvas,self).__init__(self.fig)` の部分がよくわからないです。  
この文の役割を教えていただきたいです。

[code]

    class PlotCanvas(FigureCanvas):
    
        def __init__(self, parent=None, width=5, height=4, dpi=100):
            self.fig = Figure(figsize=(width, height), dpi=dpi)
            self.axes = self.fig.add_subplot(111)
    
            super(PlotCanvas, self).__init__(self.fig)
            self.setParent(parent)
    
            FigureCanvas.setSizePolicy(
                    self,
                    QSizePolicy.Expanding,
                    QSizePolicy.Expanding
                    )
            FigureCanvas.updateGeometry(self)
            self.plot()
    
[/code]


CC BY-SA 4.0
2020-12-13T05:14:01.843
72622
2020-12-18T08:48:44.927
2020-12-13T07:41:53.113
19110
37633
question
python
classの継承について、super の __init__ を呼び出す文の役割は何ですか？


子クラスでは、親クラスの関数をオーバーライドできます。そして、オーバーライドされた場合、親クラスで定義されている関数は呼ばれません。  
これは、__init__のような関数でも同様です。

ちょっとした例を作ってみました。

[code]

    class 長方形(object):
        def __init__(self, h, w):
            self.縦 = h
            self.横 = w
    
        def 面積(self):
            return self.縦 * self.横
    
        def 周(self):
            return (self.縦 + self.横) * 2
    
        def 内接円の面積(self):
            return None
    
    
    class 正方形(長方形):
        def __init__(self, e):
            self.一辺 = e
            super(正方形, self).__init__(self.一辺, self.一辺)
            self.内接円の半径 = e / 2
    
        def 内接円の面積(self):
            return self.内接円の半径 * self.内接円の半径 * 3.14
    
    
    a = 正方形(10)
    
    print(a.面積())
    print(a.周())
    print(a.内接円の面積())
    
[/code]

正方形クラスでは、親クラスである長方形で定義されている面積関数を呼ぶことができますが、面積関数内で使っている変数
縦と横は長方形クラスの__init__で設定されます。  
正方形クラスでは__init__を定義して独自の変数 一辺を初期化していますが、そのままでは、縦と横が初期化されません。

このように、インスタンス生成時に呼ばれる__init__関数は、そのインスタンスの動作に必要な変数などの初期化を
しているので、子クラスの__init__で親クラスの__init__を呼ぶのが一般的になっています。


CC BY-SA 4.0
2020-12-18T08:48:44.927
72741
2020-12-18T08:48:44.927
710
72622
answer