Pythonでは、クラスを継承することができます。(スーパークラス・サブクラス)
Pythonはオブジェクト指向言語であるため、クラスを作成して、継承、つまりそのクラスから派生したクラスを作ることができます。
今回は、Pythonでクラスを継承し、スーパークラス・サブクラスの関係を解説します。
クラスを継承する(スーパークラス・サブクラス)
クラスの継承とは
Pythonのクラスは継承することができます。
「継承」とは「受け継ぐ」という意味で、要するに「親」から派生した「子」をつくることができるということです。
継承の便利なところは、子が親のメソッドを使えたり、オーバライドできたりといくつかありますが、詳細は後述します。
スーパークラスとサブクラス
Pythonのクラスの継承でおさえておかないといけないのは、親子関係です。継承したら親子関係になります。
例えば、クラスAを継承したクラスBを作ったとします。元になるクラスAのことを「スーパークラス」、派生したクラスBのことを「サブクラス」と呼びます。
スーパークラスが親で、サブクラスが子です。
サブクラスがスーパークラスのメソッドを使える
継承の便利なところは、子(サブクラス)が親(スーパークラス)のメソッドを使えるというところです。
上の図の2つのクラス、classA・classBでみていきます。
classBはclassAを継承しているので、classBからclassAのメソッドが使えるんです。classBを使う際に、メソッド1・メソッド2・メソッド3も使えるんです。これはとても便利です。
# サブクラスでスーパークラスのメソッドを使う subClass = classB() subClass.method1
上のコードでは、classBをインスタンス化し、classBにはないmethod1を実行しました。このようにサブクラスからスーパークラスのメソッドが使えます。
この例では3つのメソッドしかありませんが、通常はもっとたくさんのメソッドがあります。これを使いたい場合に、いちいち同じメソッドを書く必要がないのは便利ですよね。
影響なしでメソッドを追加できる
でも、「そもそも継承なんか使わなくても、元のスーパークラスにどんどんメソッドを追加していけば、サブクラスなんていらないのでは?」という疑問がわくかもしれません。
継承の便利な点として、「他のプログラムに影響を与えにくい」というのもあります。
あるクラスにどんどん機能を追加していくと、そのクラスを使っている多数のプログラムに影響を及ぼし、不具合が発生するかもしれません。特に多数の人が同時に開発するプロジェクトでは十分に起こりえますよね?
そんなときに、継承で親子関係にしてしまえば、子が親に影響を与えることはありません。継承はあくまで親から派生した子を作るだけですから、親を使っている他のプログラムへの影響はほぼないはずです。
あるクラスの機能を使いたい、でもそのクラスは他でたくさん使われているのでできれば変更したくない・・・そんなときに、継承すると親(スーパークラス)のメソッドが使えるのでとても便利です。
クラスを使う
それでは実際にクラスを継承するコードのサンプルを書いてみます。
class classA: def __init__(self): pass def cul_pow2(self, num): return num ** 2
スーパークラス「classA」を定義しました。メソッド「cul_pow2」は2乗した結果を返す関数です。
class classB(classA): def __init__(self): pass def cul_pow3(self, num): return num ** 3
スーパークラス「classA」を継承したサブクラス「classB」を定義しました。継承するには、「class サブクラス(スーパークラス)」とします。継承元をサブクラスのパラメータにするだけなので簡単ですね。
# クラスを継承する class サブクラス名(スーパークラス名): 処理
メソッド「cul_pow3」は3乗した結果を返す関数です。
# サブクラスでスーパークラスのメソッドを実行 subClass = classB() subClass.cul_pow2(3) #[結果] 9 # サブクラスのメソッドを実行 subClass = classB() subClass.cul_pow3(3) #[結果] 27
継承したサブクラスからスーパークラスのメソッド「cul_pow2」を実行して、結果が取得できました。もちろんサブクラスのメソッド「cul_pow3」の結果も取得できました。
以上、Pythonのクラスの継承についてと、スーパークラス・サブクラスの関係についての解説でした。
コメント