スポンサーリンク

コードが書ける!数式が書ける!AAが書ける!スタンプが貼れる!

無料の匿名掲示板型SNS「このはちゃんねる

新規会員募集中!

【Python】クラスの作り方。データと関数を1つにまとめる【入門第30回】

124, 2019-08-23

目次

クラスとは?

こんにちは、narupoです。
今回からPythonのクラスをやっていきます。
クラスとは、データとそれを処理する関数を、1つにまとめるための機能です。
このクラスをうまく使うとすっきりとしたプログラミングが可能です。
まぁ、最初はすっきりとしたコードは書けませんが、練習を積んでいくと書けるようになります。

今回は、具体的には↓を見ていきます。

  • クラスの作り方
  • クラスからインスタンスを作る
  • クラスにメソッドを作る
  • __init__メソッドとは?
  • __del__メソッドとは?
  • クラスにインスタンス変数を作る
  • インスタンス変数の値をインスタンスを作るときに指定できるようにする

クラスの作り方

クラスは↓のように作ります。

class クラス名:
    内容

classと書いて、ついでクラス名を書きます。
コロン(:)をつけてインデントして、クラスの内容を書きます。
たとえば、Carというクラスを作る場合は↓のようにします。

class Car:
    pass

passは何もしない命令ですが、これをクラス内に書くことで空っぽのクラスを作ることができます。

クラスからインスタンスを作る

先ほど作ったクラス。

class Car:
    pass

↑このクラスは、設計図に例えることができます。
何の設計図かと言うと、インスタンスの設計図です。
インスタンスとは一体何なのかという話ですが、インスタンスとはクラスを実体化したものです。
例えるなら自動車の設計図がクラスで、実際に設計図をもとに組み立てられた動く自動車がインスタンスと言えます。

↑のクラスからインスタンスを作るには↓のようにします。

car = Car()

クラス名にカッコ(())を付けると、クラスからインスタンスが作られます。
その作ったインスタンスを左のcarという変数に代入(=)しています。
このとき、変数carをクラスCarのインスタンスと言います。

クラスCarは空っぽのクラスで、何の機能も持ってないので、インスタンスのcarも機能を持っていません。

なにもしないインスタンス、前衛的な芸術性を感じる

クラスにメソッドを作る

走る

さきほどの何の機能も持っていないクラスCarに、機能を加えてみましょう。
クラスには関数を持たせることができます。
このとき、この関数をメソッドと言います。

車なので走らせるメソッド、runを作ります。

class Car:
    def run(self):
        print('走ります!')

runメソッドの引数に見慣れないselfという引数がありますが、これにはインスタンスが入ります。
Pythonのクラスではメソッドにこのselfを書くのがお約束になっています。
このrunメソッドをインスタンスから呼び出してみましょう。
↓のようにインスタンスを作って、

car = Car()

↓のようにrunメソッドを呼び出します。

car.run()

インスタンス変数からメソッドを呼び出すには、インスタンスにドット(.)を付けて、メソッド名を書きます。
こうするとメソッドを呼び出すことができます。
メソッドを呼び出すと、先ほど作ったrunメソッドが呼ばれます。

    def run(self):
        print('走ります!')    

runメソッドが呼ばれると、中に書かれているprintが実行されます。
このとき、引数selfにはさきほどのインスタンス変数carが入っています。
このように引数selfには、呼び出し元のインスタンスが入ります。

なので、たとえばrunの他にhorn(クラクション)というメソッドを作ったとします。

class Car:
    def run(self):
        self.horn()

    def horn(self):
        print('どけどけ! Car様のお通りだ!')

car = Car()
car.run()

↑のようにrunメソッドからhornメソッドを呼ぶには、selfにドットを付けてhorn()と書きます。
このように、selfを使うことで同じインスタンス内のメソッドやデータにアクセスできるようになります。
↑のコードの実行結果は↓のようになります。

どけどけ! Car様のお通りだ!

__init__メソッドとは?

ここでクラスになくてはならないメソッドを紹介したいと思います。
その名も__init__メソッドです。
このメソッドは、クラスからインスタンスが作られたときに自動で呼ばれます。
よって、例えば↓のように__init__メソッドを書いて、

class Car:
    def __init__(self):
        print('インスタンスが作られました')

↓のようにインスタンス化します。

car = Car()

すると↓のような実行結果になります。

インスタンスが作られました

Car()でインスタンスが作られるので、このときに__init__メソッドが呼ばれて、printが実行されます。
この__init__メソッドは省略することができます。

また、こういったインスタンスを作るときに呼ばれるメソッドを、俗にコンストラクタともいいます。
C++などではコンストラクタいう呼び方が普通です。
コンストラクタを呼び出すことをコンストラクトするとも言います。「構築する」という意味です。
これの対義語でデストラクタ、デストラクトもあります。

__del__メソッドとは?

いっぽう、__del__メソッドというのは、インスタンスが破棄されるときに呼ばれます
たとえば↓のように__del__メソッドを作ります。

class Car:
    def __del__(self):
        print('さよならァ!')

で、↓のようにインスタンスを作ります。

car = Car()

↑このインスタンスcarを意図的に破棄するにはdel文を使います。
↓のようにするとcarを破棄できます。

del car

すると、先ほど作った__del__メソッドが呼ばれます。

さよならァ!

このように__del__メソッドはインスタンスが破棄されるときに呼ばれます。
他には、たとえば↓のように関数内でインスタンスを作ったとします。

def func():
    car = Car()

func()

func関数が終了すると、インスタンスcarは自動的に破棄されます。
よって先ほどと同じように__del__メソッドが呼ばれます。

クラスにインスタンス変数を作る

変数

クラスのインスタンスには変数を持たせることも出来ます。
たとえば__init__メソッド内で↓のようにします。

class Car:
    def __init__(self):
        self.name = 'サンダーローリング号'
        self.weight = 100

selfにドットをつけて、変数名を書きます。
その変数に値を代入することでインスタンスに変数を持たせることができます。
このとき、この変数をインスタンス変数と言います。

インスタンスからインスタンス変数にアクセスするには、メソッドと同じようにドットでアクセスします。

car = Car()
print(car.name, car.weight)

↑のコードの実行結果は↓のようになります。

サンダーローリング号 100

インスタンス変数の値を変更することも可能です。

car.name =  'オンボロマニュアル車'

メソッド内でインスタンス変数にアクセスするには、同じようにselfにドットをつけます。
たとえば↓のようにrunメソッド内でインスタンス変数にアクセスします。

class Car:
    def __init__(self):
        self.name = 'サンダーローリング号'
        self.weight = 100

    def run(self):
        print(self.name + 'が走ります!')
        self.weight = 200

インスタンス変数の値をインスタンスを作るときに指定できるようにする

さきほどのインスタンス変数は、__init__メソッド内で決め打ちしてましたが、インスタンスを作るときに設定できると便利です。
そのようにしたい場合は↓のようにします。

class Car:
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight

__init__メソッドに引数を加えて、その引数をインスタンス変数に代入しています。
これは定型文なのでそのまんま覚えましょう。
↓のようにすればインスタンスを作るときに変数の値をセットできます。

car = Car('豪速鉄球号', 500)

print(car.name, car.weight)

↑のコードの実行結果は↓のようになります。

豪速鉄球号 500

おわりに

クラスは機能が沢山あるのですが、今回は基本的な機能を紹介しました。
クラスを扱えるようになると、いろいろと現代的なプログラミングのテクニックや定石を使えるようになるので、覚えておきましょう。

また見てね

関連動画



投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。

スポンサーリンク

スポンサーリンク

スポンサーリンク

スポンサーリンク