【入門者向け】Pythonにおけるクラスの継承とオブジェクト指向|Python入門 #8

f:id:lib-arts:20190804170008p:plain

#1ではPythonを用いたFizzBuzzのコーディングについてまとめました。

入門者の方に読んでみていただいたところ、少し難しかったようなので、#2以降では#1で触れた基本文法をそれぞれもう少し丁寧に解説を行なっていきます。基本的には下記のPythonのドキュメントのチュートリアルなどを元にして解説していきます。

Python チュートリアル — Python 3.7.4 ドキュメント

#2ではPythonにおける四則演算・文字列について、#3ではリスト・タプル・辞書について、#4ではPythonの制御構文について、#5ではPythonの入出力に関して、#6ではPythonの関数の実装について、#7ではPythonにおけるクラスの実装について取り扱いました。

【入門者向け】Pythonの基礎文法① 四則演算・文字列|Python入門 #2 - lib-arts’s diary

【入門者向け】Pythonの基礎文法② リスト・タプル・辞書|Python入門 #3 - lib-arts’s diary

【入門者向け】Pythonの基礎文法③ 制御構文(if、for)|Python入門 #4 - lib-arts’s diary

【入門者向け】Pythonの入出力の実装|Python入門 #5 - lib-arts’s diary

【入門者向け】Pythonの関数の実装|Python入門 #6 - lib-arts’s diary

【入門者向け】クラスの概要とPythonにおける実装|Python入門 #7 - lib-arts’s diary

#8ではSection9.5をベースにPythonにおけるクラスの継承とオブジェクト指向について取り扱います。

9. クラス — Python 3.7.4 ドキュメント

以下目次になります。
1. Pythonにおけるクラスの継承(9.5)
2. オブジェクト指向入門
3. まとめ


1. Pythonにおけるクラスの継承(9.5)
1節ではSection9.5の内容をベースにPythonのクラス継承についてまとめていきます。

f:id:lib-arts:20190901163421p:plain

上記に『継承の概念をサポートしない言語機能は "クラス" と呼ぶに値しません』と述べられているように、クラスを考える際に継承という考え方は非常に重要です。まずクラスの継承とは何かですが、よく例としてあがるのは動物(Animal)と犬(Dog)、猫(Cat)の例などです。犬と猫は種別としては違いますが、動物(Animal)として共通点があります。したがって、共通の特徴を動物(Animal)として定義した上で犬(Dog)と猫(Cat)を実装した方が体系的な実装が可能になり整理がしやすくなります。

このように継承によって、同じコードの記述を減らすことができます。
抽象的な話が多くなるとわかりにくいので、早速実装を確認していきます。

class Number:
    def __init__(self, realpart, imagpart):
        self.n = int(realpart)
        self.r = int(realpart)
        self.i = 0

class Complex(Number):
    def __init__(self, realpart, imagpart):
        super(Complex, self).__init__(realpart, imagpart)
        self.r = realpart
        self.i = imagpart

x = Number(3.0, -4.5)
print(x.n)
print(x.r)
print(x.i)

x = Complex(3.0, -4.5)
print(x.n)
print(x.r)
print(x.i)

実行結果は下記になります。

f:id:lib-arts:20190903190354p:plain

この際に複素数は整数を拡張して実装を行っています。superについては親クラスのコンストラクタ(__init__メソッド)を実行するために用いています。今回程度の実装ではまだありがたみまではわからないかもしれないですが、self.nの実装を子クラスである複素数では行わないで済んでいます。


2. オブジェクト指向入門
2節ではオブジェクト指向の簡単な概要について説明します。Pythonのドキュメント自体はオブジェクト指向にはあまり触れられていませんが、クラスやクラスの継承が出てきたら、オブジェクト指向も関連で理解しておくと良いので取り扱うものとします。
まずオブジェクト指向の概要について確認します。

f:id:lib-arts:20190903190951p:plain

オブジェクト指向 - Wikipedia
上記はWikipediaオブジェクト指向の説明です。オブジェクト指向(object oriented)はソフトウェア工学理論の一つであり、ソフトウェア設計とプログラム記述の際に用いられる考え方とされています。このオブジェクト指向をプログラムに用いることをオブジェクト指向プログラミング(OOP; Object-Oriented Programming)と言ったりしています。


3. まとめ
#8ではPythonにおけるクラスの継承と、オブジェクト指向の簡単な入門について取り扱いました。
#9、#10では#11以降でPythonの便利なライブラリを見ていくにあたって、ドキュメントのSection6のモジュールについて簡単に取り扱っておければと思います。

6. モジュール — Python 3.7.4 ドキュメント