「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Pythonをゆっくりていねいに学ぶ(その13/X)

 Pythonを真面目にゆっくり学ぶべく

を参考に学んでいきます*1

6. オブジェクトとクラス

6.3 継承

 コーディング上の問題解決において、既存のクラスで必要なことを殆どしてくれるオブジェクトが作成できる際に便利なのが継承である。すなわち使いたい既存のクラスを指定し、追加ないし変更したい一部のみを定義した新しいクラスを作る。これによりメンテナンスしなければならないコードを省略できる。
 こうして継承した新たなクラスでは、古いクラスの動作は使われない(オーバーライド)。

#########################################################
### Carクラスを定義し、それを元にサブクラスYugoを定義 ###
#########################################################

# クラスの定義
class Car():
    def __init__(self,size):
        self.size = size
class Yugo(Car):
    def __init__(self,size):
        super().__init__(size)
        self.size = size + ' Car'
    def exclaim(self):
        print("I'm a Yugo! Much like a Car, but more Yugo-ish.")

# オブジェクトの定義
give_me_a_car = Car('Big')
give_me_a_yugo = Yugo('Big')

print(give_me_a_car.size)
print(give_me_a_yugo.size)

give_me_a_yugo.exclaim()
6.3.1 superによる親への支援要請

 子クラスが親クラスのメソッドを呼び出すには、親クラスのメソッドを\mathrm{super()}で明示的に呼び出す必要がある。上の例では、以下のように動いている:

  • \mathrm{super()}が親クラスの\mathrm{Car}の定義を呼び出す。
  • \mathrm{super()}__\mathrm{init()}メソッド呼び出しは、\mathrm{Car.}__\mathrm{init()}メソッドを呼び出す。このとき\mathrm{self}引数の親クラスへの受け渡しは自動的に行われる。
  • \mathrm{self.size}=\mathrm{size}\mathrm{Car}にはない新しいコードで、これにより親クラスと差別化されている。

 新しいクラスを定義せず、敢えてオーバーライドさせたのは、親クラスにおける変更がそのまま子クラスに反映されるというメリットがあるからである。

*1:第2版が出ているものの初版しか持っていないのでこちらで。

プライバシーポリシー お問い合わせ