

オーバーライドについて教えてください。次の例文は継承したメソッドと同じ名前のメソッドを記述しています。  
オーバーライドはどんな時に記述したらいいですか。後、それのメリットはなにでしょうか？文法は覚えられるのですが、オーバーライドを使う意味を教えてください。派生クラスのメソッドが働くことはわかります。

◆ **例文** ◆

[code]

    class Book:
        def __init__(self, title, price):
            self.title = title
            self.price = price
        def printPrice(self, num):
            print(self.title + ':', num, '冊で', self.price * num, '円')
    
    class ColorBook(Book):
        color = '黄'
        def printPrice(self, num):
            print(self.title + ':', num, '冊で', self.price * num, '円')
            print(self.color)
    
    book2 = ColorBook('絵本', 1380)
    book2.printPrice(2)
    
[/code]

● **実行結果** ●

絵本：2冊で2760円  
黄

環境：Windows 10


CC BY-SA 4.0
2020-03-03T12:08:27.883
63528
2020-03-03T23:03:49.170
2020-03-03T13:49:25.833
19110
38025
question
python
Pythonのオーバーライドについて。その働きを教えてください。


おおきなメリットは  
・コード量を減らすことができる

例文のように単一の簡単なメソッドしか持たないクラスではその意味を実感することは難しいですが、すでにあるクラスの機能を「ちょっとだけ」変更するために使います。メソッド単位での変更になるので、「後から変更したくなる要素」を事前に設計し切り分けておかないといけません。

文法ではなく、「より効率的なデザイン」を考え始めると有用さに気づくと思います。反面、基底クラスに共通処理が集中するので基底クラス側に問題が発生した場合の対処が難しくなったりと、反作用もあるので、設計段階での試案が重要になります。

文法の学習が終わったら、「オブジェクト指向とデザインパターン」をキーワードに学習されると世界が広がります。

たとえば、C#やJava,C++といった、言語自体がオブジェクト指向を実現することを目的の一つとした言語を使っていると、そもそもの言語機能の呼び出し時にこの恩恵を雰囲気感じることができるのですが、Pythonでは「使いながら雰囲気をつかむ」というのは難しのかもしれません。


CC BY-SA 4.0
2020-03-03T23:03:49.170
63540
2020-03-03T23:03:49.170
10174
63528
answer