初心者のためのpython入門

自分がつまづいたところやつまづきやすいところを中心に書いていきます。また、役に立つライブラリの紹介などをしていきます。

継承[1]

継承

継承とは、既存のクラスを利用して新たなクラスを定義する方法のことです。既に存在するクラスの機能を一部変更したり、追加したい場合にもともとのクラスを自体を変更してまうと、他のプログラムとの互換性などを損なう可能性があります。そのような場合に、継承を使っていきます。

継承の仕方

まずは、簡単な例を見ましょう。

# hero.py
class Hero():
    def __init__(self, name):
        self.name = name

    def self_introduction(self):
        print("私の名前は勇者"+self.name+"です。")

class SuperHero(Hero):
    pass


hero = Hero('ヨシヒコ')
superhero = SuperHero('ヨシピコ')

hero.self_introduction()
superhero.self_introduction()
# 実行結果 python hero.py
私の名前は勇者ヨシヒコです。
私の名前は勇者ヨシピコです。

SuperHeroクラスはHeroクラスを継承しています。継承の仕方は、以下の通りです。

  1. classを書きます。
  2. クラス名を書きます。
  3. クラス名の横の括弧の中に継承したいクラス名を書きます。
  4. インデントし、メソッドやインスタンス変数などの付け加えたい内容を書きます。(今回は、何も付け加えていないのでpassを書いています。)

実行結果は、上記のようになります。新クラスのSuperHeroクラスはHeroクラスを継承しています。SuperHeroクラスはHeroクラスの全ての機能を使うことができます。また、継承関係における元のクラス(今回はHero)ことを親クラススーパークラスと呼びます。新しいクラスのことを子クラスサブクラスと呼びます。子クラスは親クラスをより専門的にしたクラスであるという事がわかります。

継承関係の図は以下のようになります。矢印の向きに注意してください。子クラスから親クラスの方へと伸びます。

f:id:tiginkgo:20171228234534p:plain:w200

メソッドを追加した継承

先ほどの例は、子クラスに変更を加えていません。今度は、子クラスにメソッドを追加してみましょう。

# hero.py
class Hero():
    def __init__(self, name):
        self.name = name

    def self_introduction(self):
        print("私の名前は勇者"+self.name+"です。")

class SuperHero(Hero):
    def self_super_introduction(self):
        print("私の名前はスーパー勇者"+self.name+"です。")


hero = Hero('ヨシヒコ')
superhero = SuperHero('ヨシピコ')

hero.self_introduction()
superhero.self_introduction()
superhero.self_super_introduction()
# 実行結果 (python hero.py)
私の名前は勇者ヨシヒコです。
私の名前は勇者ヨシピコです。
私の名前はスーパー勇者ヨシピコです。

実行結果は上記のようになります。SuperHeroクラスに、self_super_introfuctionメソッドを追加しました。きちんと新たなメソッドを呼び出せていることがわかります。このようにクラスを継承することにより、必要な部分だけ拡張していく事ができます。

最後に

お疲れ様でした。次回は継承についてもう少し詳しく(オーバーライドや多重継承)説明します。