

あるクラスを継承したクラスを作成し、イニシャライザを

[code]

    def __init__(self):
        super().__init__()
    
[/code]

とすることに何か意味はありますか。ここで記述される処理は、継承した時点で何を記述せずとも実行されると考えるのですが…御回答よろしくお願いします。


CC BY-SA 4.0
2022-01-26T04:04:19.847
85938
2022-01-26T04:36:48.323
2022-01-26T04:36:48.323
7290
51078
question
python
Python super()について


親クラスの `__init__` をオーバーライド（上書き）してしまっているので、そのままでは子クラスで定義した `__init__`
の内容しか実行されません。そのため、もし親クラスの `__init__` の処理に **追加する形で** 子クラスの `__init__`
を定義したいのであれば、子クラス側で親クラスの `__init__` を呼び出す必要があります。

[code]

    class Greet():
        def __init__(self):
            self.hello = 'Hello!'
        def enter(self):
            print(f'{self.hello}')
    
    class Greet2(Greet):
        def __init__(self):
            super().__init__()
            self.bye = 'Bye!'
        def depart(self):
            print(f'{self.bye}')
    
    dialogue = Greet2()
    dialogue.enter()
    dialogue.depart()
    
[/code]

このコードで `super().__init__()` をコメントアウトすると

> AttributeError: 'Greet2' object has no attribute 'hello'

オーバーライドで親クラスの `__init__()` が実行されなくなっているためです。


CC BY-SA 4.0
2022-01-26T04:35:30.900
85939
2022-01-26T04:35:30.900
7290
85938
answer