クラスの継承
クラスの継承とはクラスが持つ変数とメソッドを引き継いで(継承して)新しいクラスを作る仕組みです。
新しいクラスを作成するときに、既存のクラスが有効に使える場合も多いです。例えばAnimalクラスを作成しておいて、それを元にPersonクラスを作成するとコードの量を減らすことができます。
継承元のクラス:スーパークラス
継承先のクラス:サブクラス
class Fruits:
pass
class Apple(Fruits):
pass
passとは:passは何も実行することがないという意味です。passを使うことで何も記述しないでエラーになることを防ぎます。
関数名、クラス名は決まっているが、実装がまだ明確でないときや、if文のelse 節で使ったりする場合もあります。
クラス継承の例
class Animal: kind = '動物' def animal_print(self): print('{}クラスです'.format(self.kind)) class Parson(Animal): name = '人間' def person_print(self):
インスタンス化の例
animal = Animal() # スーパークラスのインスタンス化 animal.animal_print() animal.kind
結果
動物クラスです
‘動物’
サブクラスやスーパクラスからのメソッドや属性の呼び出し例
#サブクラスのインスタンスからサブクラスの属性呼び出し person = Parson() # サブクラスのインスタンス化 person.animal_print() #サブクラスのインスタンスからスーパークラスのメソッド呼び出し person.person_print() #サブクラスのインスタンスからサブクラスのメソッド呼び出し print(person.kind) #サブクラスのインスタンスからスーパークラスの属性呼び出し print(person.name) #サブクラスのインスタンスからサブクラスの属性呼び出し
結果
動物クラスです
人間クラスです
動物
人間
継承の特徴
継承はis-a関係にあります。
is-aの関係とは
Apple is a fruit.
「リンゴはフルーツである」の関係にあるものが継承を行う際のポイントになります。
コンストラクタを含んだ継承
# Animalクラスを継承したクラス作成 class Animal: def __init__(self, name): self.name = name def hello(self): print('Hello',self.name) class Cat(Animal): def jump(self): print(self.name, 'はジャンプした')
animal = Animal('キョロ')animal.hello() cat = Cat('ニャンコ')cat.hello()cat.jump() animal = Animal('キョロ') animal.hello() cat = Cat('ニャンコ') cat.hello() cat.jump()
結果
Hello キョロ
Hello ニャンコ
ニャンコ はジャンプした
オーバーライド
スーパークラスとサブクラスで同じ名前のメソッドを作るとサブクラスのメソッドが優先されて上書きした状態になります。 このことをオーバーライドと言います。
オーバーライドの例
class English: def hello(self): print('Hello') class Japanese(English): def hello(self): print('こんにちは')
english = English() english.hello()
結果
Hello
japanese = Japanese() japanese.hello()
結果
こんにちは
class Display: def __init__(self): print('挨拶するよ') def hello(self): print('Hello',end=' ') class DecoDisplay(Display): def hello(self, sentence): super().hello()
display = Display() display.hello()
結果
挨拶するよ
Hello
deco = DecoDisplay() deco.hello('Python')
結果挨拶するよ
Hello Python
参考になった書籍
プログラミングを少しでも経験がありPython の文法を学習する場合は、「入門 Python 3」が良いと思います。長く使えます。
「退屈なことはPython にやらせよう」はオブジェクト指向の解説がないです。代わりにPythonを使った便利な実例が初心者には嬉しい内容です。正規表現から、簡単なスクレイピング 、画像操作などあります。ただし、中級者以上には少し物足りないかもしれません。
Pythonサンプルのダウンロード
ここでダウンロードする「object2.ipynb」ファイルは、このPython動画で使用したものです。
Python入門一覧
- Python入門 クラスの継承とオーバーライド(動画あり)
- Python入門 オブジェクト指向について、クラスの作り方(動画あり)
- Python入門 lambda関数の使い方、map関数の使い方(動画あり)
- Python入門 位置引数、キーワード引数、デフォルト引数、便利な引数の使い方(動画あり)
- Python入門 グローバル変数とローカル変数(動画あり)
- Python入門 モジュールのインポートとrandomモジュール(動画あり)
- Python入門 関数の定義方法(動画あり)
- Python入門 内包表記(動画あり)
- Python入門 zip関数(動画あり)
- Python入門 for in文の活用(動画あり)
- Python入門 for in文の基本(動画あり)
- Python入門 三項演算子(動画あり)
- Python入門 if文の使い方2 while文の使い方(動画あり)
- Python入門 if文の使い方(動画あり)
- Python入門 浅いコピーと深いコピー(動画あり)
- Python入門 参照渡し(動画あり)
- Python入門 集合(動画あり)
- Python 入門 辞書(動画あり)
- Python 入門 タプルについて(動画あり)
- Python入門 リストのメソッド(動画あり)
- Python入門 リストのスライス(動画あり)
- Python入門 リスト
- Python入門 BMI課題 (動画あり)
- Python入門 文字列の連結とフォーマット1(動画あり)
- Python入門 文字列のフォーマット2(動画あり)
- Python入門 エスケープと型変換とinput()の使い方(動画あり)
- Python入門 pep8(動画あり)
- Python入門 変数の練習(動画あり)
- Python入門 変数(動画あり)
- Python入門 文字列(動画あり)
- Python入門 演算子(動画あり)
- Python入門 Python をはじめよう! (動画あり)