Pythonのクラスの継承について。
この記事の内容はコチラです
- Pythonでクラスを継承する
- スーパークラス・サブクラスの意味
Pythonはオブジェクト指向言語であるため、クラスを作成して継承する・・つまりそのクラスから派生したクラスを使う事ができます。
今回は、Pythonでクラスを継承する方法を解説します。
クラスを継承する(スーパークラス・サブクラス)
クラスの継承とは
Pythonのクラスは継承することができます。
「継承」とは「受け継ぐ」という意味で、要するに「親」から派生した「子」をつくることができるということです。
● 継承のメリット
- 子が親のメソッドを使える
- 他のプログラムに影響しない
継承の便利なところは、「子が親のメソッドを使える」「他のプログラムに影響しない」などかありますが、詳細は後述します。
スーパークラスとサブクラス
Pythonのクラスの継承でおさえておかないといけないのは、「親子関係」です。継承したら親子関係になります。
例えば、クラスAを継承したクラスBを作ったとします。元になるクラスAのことを「スーパークラス」、派生したクラスBのことを「サブクラス」と呼びます。
スーパークラスが親で、サブクラスが子です。
子が親のメソッドを使える
継承の便利なところは、子(サブクラス)が親(スーパークラス)のメソッドを使えるというところです。
上の図の2つのクラス「classA」「classB」を例に具体的にみていきましょう!
「classB」は「classA」を継承しているので、「classB」から「classA」のメソッドが使えるんです。「classB」を使う際に、「classA」のメソッド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のクラスの継承の使い方でした。
コメント