1. HOME»
  2. Python入門»
  3. クラスを使ってみよう!

クラスを使ってみよう!

Python(パイソン)プログラミングにおける、クラスの使(つか)い方(かた)を学(まな)んでいきましょう。
少々(しょうしょう)むずかしい言葉(ことば)が出(で)てきますが、分(わ)かりやすくご説明(せつめい)しますので、安心(あんしん)してお読(よ)みください。

目次
  1. クラス、メソッドについて
  2. インスタンスについて
  3. クラスを作ってみよう!

クラス、メソッドについて

Python(パイソン)プログラミングにおいての「クラス」は、いろんなデータや機能(きのう)が、集(あつ)まったもののことです。
そして「メソッド」は、そのクラスが持(も)った機能(きのう)のことです。

と、言(い)われましても、いまいちピンとこないと思(おも)います。

そこで、いろんな人(ひと)たちの集(あつ)まりを想像(そうぞう)してみてください。
勉強(べんきょう)が得意(とくい)な人、歌(うた)が上手(じょうず)な人、絵(え)が得意な人、運動(うんどう)が得意な人……いろんな人がいます。

この人たちをクラス分けしてみましょう。

  • Scholar(学者(がくしゃ)クラス)
  • Singer(歌(うた)い手(て)クラス)
  • Illustrator(画家(がか)クラス)
  • Athlete(アスリートクラス)

例(たと)えば「Singer(歌い手クラス)」であれば、「歌」が得意です。
「歌が得意」ということは、歌うための技(わざ)を、いろいろ持(も)っています。

ビブラート、しゃくり、ウィスパーボイス、シャウト、などです。

ある「クラス」の中で使える、こういった技が、「メソッド」です。

(ビブラート:声(こえ)を震(ふる)わせる技、しゃくり:実際(じっさい)の音(おと)よりちょっと低(ひく)い声から入って本当(ほんとう)の音に戻(もど)す技、ウィスパーボイス:ささやくような声で歌う技、シャウト:叫(さけ)ぶように歌う技)

インスタンスについて

もうひとつ、覚(おぼ)えておきたい言葉(ことば)があります。
それは「インスタンス」です。

インスタンスは、クラスを実体化(じったいか)したものです。
……プログラミング用語(ようご)って、曖昧(あいまい)な言葉(ことば)でしか表(あらわ)せないようなものばかりなので、こんなこと言(い)われても分(わ)からなくて当然(とうぜん)です。

さきほど、いろんな人を、いろんなクラスに分けました。
「Singer(歌(うた)い手(て)クラス)」であれば、歌が得意(とく)な人たちのクラスですね。

では、歌が好(す)きだけど、まだ得意ではない人(ひと)が、このクラスに入(はい)ったらどうでしょう。
きっと周(まわ)りの人たちと一緒(いっしょ)に練習(れんしゅう)して、どんどん歌がうまくなると思(おも)います。

そして「Singer(歌い手クラス)」が使(つか)える技(わざ)、ビブラート、しゃくり、ウィスパーボイス、シャウトも、使えるようになります。

この「クラスによって技を身(み)につけた人」こそが、「インスタンス」です。

(実際(じっさい)のプログラミングでは、「人」ではなく「もの」だったりすることも多(おお)いです。ただ、ここではイメージしやすいように、「人」として進(すす)めていきます)

クラスを作ってみよう!

では、実際(じっさい)にクラスを作(つく)ってみましょう。
ここでは、さきほどの例(れい)の、Singer(歌い手)クラスを作ってみたいと思(おも)います。

# 歌い手クラス
class Singer:
    def __init__(self, name):
        self.name = name

    def vibrato(self):
        print(f'{self.name}はビブラートを使いました')

    def slide_up(self):
        print(f'{self.name}はしゃくりを使いました')

    def whisper(self):
        print(f'{self.name}はウィスパーボイスを使いました')

    def shout(self):
        print(f'{self.name}はシャウトを使いました')


# インスタンスを作る
sachiko = Singer('さちこ')

# 技を使う
sachiko.vibrato()
sachiko.shout()

上の例の、2〜16行目が、Singer(歌い手)クラスです。
そのクラスの中の、最初(さいしょ)がdefとなっているブロックが、それぞれ「メソッド」です。

関数(かんすう)にとてもよく似(に)ていますが、それぞれの引数(ひきすう)すべてに、selfと書(か)かれています。
selfは「自分自身(じぶんじしん)」を表(あらわ)します。

さて、メソッドの中(なか)に、ほかのとはちょっと違(ちが)うメソッドがひとつあります。
それは、3〜4行目の、この部分(ぶぶん)です。

def __init__(self, name):
    self.name = name

これは、初期設定(しょきせってい)のためのメソッドです。
self.nameに、nameの値(あたい)を代入(だいにゅう)していますね。
つまり、「自分自身のname」に「name」を代入していることになります。

この「name」は、__init__メソッドの引数です。
では、「name」にはなにが代入されているのでしょうか。

それは、20行目を見ると分かります。

# インスタンスを作る
sachiko = Singer('さちこ')

これは、Singerクラスのインスタンスを作っている部分です。
Singerの後ろの()に、'さちこ'の文字列(もじれつ)が入っています。

つまり、さきほどの__init__メソッドの引数であるnameには、「'さちこ'」が入っていました。

さて、「インスタンス」は、「クラスによって技(わざ)を身(み)につけた人(ひと)」のことでしたね。
つまり、sachikoは、Singer(歌い手)としての技が使(つか)えます。

そして、実際にその技を使ったのが、23〜24行目です。

# 技を使う
sachiko.vibrato()
sachiko.shout()

sachiko.vibrato()でビブラートを、sachiko.shout()でシャウトを使っています。
そして、実行結果(じっこうけっか)は次(つぎ)のようになります。

実行結果

さちこはビブラートを使いました
さちこはシャウトを使いました
オリジナルゲーム.com