クラスを作ろう! (6/6)
作成:2017-06-03 14:32
更新:2017-06-03 14:32
更新:2017-06-03 14:32
■継承でクラスをパワーアップ!
クラスを定義する最大の利点は「使い回しができること」です。一度作ってしまえば、あとはそれをそのままコピーしてあちこちで利用できます。
ただし、実際に使ってみると「ここはもっとこうしたほうがいい」ということが出てくるでしょう。が、ある程度の規模のプログラムになってきて、あちこちでクラスを使っていると、この修正は用意ではありませんね。
こんなとき、実に便利な機能が用意されています。それは「継承」というものです。
継承というのは、既にあるクラスをそのまま受け継いで、新しいクラスを作ることです。「受け継ぐ」というのは、つまり「クラスにあるすべての機能をそのまま引き継ぐ」ということです。つまり、そのクラスにあるものをまるごとそっくり貰って、新しいクラスが作れるのです。
この継承を使ってクラスを定義するには、以下のようにしてクラスを作ります。
継承では、継承する元のクラスを「基底クラス」、新しく作ったクラスを「派生クラス」といいます。
実際の利用例を下のリストにあげておきましょう。ここでは、Memberクラスを継承して、PowerMemberという派生クラスを作っています。
このPowerMemberクラスでは、def __init__(self,str1,str2):というようにして、2つの引数を用意しました。そして、self.nameとself.mailにそれぞれ設定をしています。――だけど、あれ? ちょっと考えてみてください。
よく見てみると、このPowerMemberクラスには「mail」だけしかインスタンス変数が用意されていませんね。それなのに、self.nameの値はちゃんと保管されています。これは、基底クラスであるMemberにnameが用意されているからです。継承は、基底クラスにある機能を全て受け継いで利用することができます。従って、PowerMemberにnameを用意する必要はないのです。
メンバー変数に限らず、メソッドもすべてスーパークラスにあるものはそのまま使うことができます。この継承を使えば、既にあるクラスをどんどん拡張して機能強化していけるというわけです。
Pythonでは、さまざまなクラスがライブラリに用意されています。そして、それらを利用する際、この「継承」が使われています。
例えば、先に「リスト」「タプル」「レンジ」といったコンテナについて説明をしましたね。これらも、実はすべて「クラス」として用意されています。これら3つのクラスに共通した機能が多いのは、「シーケンス」というインデクスで管理するコンテナクラスがあってそれを継承してリストやタプルができている、と考えるとイメージしやすいのではないでしょうか。
ただし、実際に使ってみると「ここはもっとこうしたほうがいい」ということが出てくるでしょう。が、ある程度の規模のプログラムになってきて、あちこちでクラスを使っていると、この修正は用意ではありませんね。
こんなとき、実に便利な機能が用意されています。それは「継承」というものです。
継承というのは、既にあるクラスをそのまま受け継いで、新しいクラスを作ることです。「受け継ぐ」というのは、つまり「クラスにあるすべての機能をそのまま引き継ぐ」ということです。つまり、そのクラスにあるものをまるごとそっくり貰って、新しいクラスが作れるのです。
この継承を使ってクラスを定義するには、以下のようにしてクラスを作ります。
def クラス名 ( 継承するクラス ):
……クラスの内容……
継承では、継承する元のクラスを「基底クラス」、新しく作ったクラスを「派生クラス」といいます。
実際の利用例を下のリストにあげておきましょう。ここでは、Memberクラスを継承して、PowerMemberという派生クラスを作っています。
このPowerMemberクラスでは、def __init__(self,str1,str2):というようにして、2つの引数を用意しました。そして、self.nameとself.mailにそれぞれ設定をしています。――だけど、あれ? ちょっと考えてみてください。
よく見てみると、このPowerMemberクラスには「mail」だけしかインスタンス変数が用意されていませんね。それなのに、self.nameの値はちゃんと保管されています。これは、基底クラスであるMemberにnameが用意されているからです。継承は、基底クラスにある機能を全て受け継いで利用することができます。従って、PowerMemberにnameを用意する必要はないのです。
メンバー変数に限らず、メソッドもすべてスーパークラスにあるものはそのまま使うことができます。この継承を使えば、既にあるクラスをどんどん拡張して機能強化していけるというわけです。
Pythonでは、さまざまなクラスがライブラリに用意されています。そして、それらを利用する際、この「継承」が使われています。
例えば、先に「リスト」「タプル」「レンジ」といったコンテナについて説明をしましたね。これらも、実はすべて「クラス」として用意されています。これら3つのクラスに共通した機能が多いのは、「シーケンス」というインデクスで管理するコンテナクラスがあってそれを継承してリストやタプルができている、と考えるとイメージしやすいのではないでしょうか。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
class Member: name = "" def __init__(self,str): self.name = str def showMsg(self): print("Hello," + self.name + ".How are you?") class PowerMember (Member): mail = "" def __init__(self,str1,str2): self.name = str1 self.mail = str2 def showMsg(self): print("Hello," + self.name + ".") print("Your mail address is '" + self.mail + "'.") taro = Member("Taro") taro.showMsg() hanako = PowerMember("Hanako","hanako@flower.com") hanako.showMsg()
※関連コンテンツ