【Python】class(クラス)の動作と書き方


Pythonはプログラミングの中でも見やすく、書きやすいと言われています。
しかし、いくら他のプログラムよりも使いやすいと言っても、多くのプログラムを書いていくと複雑になっていきます。

このようになると、効率よくプログラムを作成していく機能が必要となります。

「クラス」は本格的なプログラムを作成する際に使用され、効率よくコードを作成していくための仕組みとなります。


「クラス」の基本動作

プログラムが複雑になるにつれて、効率よくプログラムを作成する上で必要となる機能が「クラス(class)」です。
クラスは効率よくプログラムを作成していくための仕組みであり、「データ」と「処理」をまとめる仕組みとなっています。

class(クラス)の書き方

クラスは変数や関数などをまとめて記述します。
これを「クラスの定義」と言います。

ベースとなる書き方は以下となります。

class クラス名:

    def メソッド名(self, 引数リスト):
        self.変数 = ...
        ...
        return 式
  • class クラス名: → クラスを定義
  • def メソッド名 → 処理を表す関数(メソッド)
  • self.変数 → データを表す変数(データ属性)

pythonではデータ属性とメソッドをまとめて、「属性」と呼びます。

以下では2つのデータ属性を用意し、メソッドを定義しています。

class Person:

    def getname(self):
        return self.name

    def getage(self):
        return self.age

上記では2つのデータ属性作成しています。

  • 人の名前のデータ属性「name」
  • 年齢のデータ属性「age」

さらに2つのメソッドを定義しています。

  • 名前を調べる「getname()メソッド」
  • 年齢を調べる「getage()メソッド」

クラスにはデータ属性とメソッドを記述することを覚えておきましょう。

インスタンスの作成

上記でクラスの定義は完了したので、このクラスを利用するには「インスタンスを作成する」処理を実施します。

インスタンスは「クラス名()」と言う指定で作成し、インスタンスを表す変数(インスタンス名)に代入します。

インスタンス名 = クラス名()

この書き方により、以下のようにインスタンスの作成します。

pr = Person()

「py」はインスタンス名となります。
これにより、変数「pr」がpersonクラスのインスタンスを表すことになります。
このインスタンスによりPersonクラスのデータ属性、メソッドを利用できるようになります。

データ属性・メソッドを利用する

インスタンスを設定したら、クラスからデータ属性、メソッドを利用します。
これらを利用するには「.(ピリオド)」を使用します。

属性を利用する書き方

インスタンス名.データ属性名
インスタンス名.メソッド名(引数リスト)

今回のPersonクラスで、以下のコードで、インスタンスのデータ属性に値を代入し、メソッドを呼び出します。

pr.name = '小林'
......
pr.getname()

この書き方により、Personデータ属性である「name」に名前を代入したり、getname()メソッドを使って名前を調べたりすることができるようになります。
以下では、クラスの定義からインスタンスの作成の一連のプログラムを書いています。

クラスを利用したプログラム

class Person:
    def getname(self):
        return self.name

    def getage(self):
        return self.age

pr = Person()
pr.name = '小林'
pr.age = 18

name = pr.getname()
age = pr.getage()

print(name,'さんは', age, '歳です。')

実行結果

$ python3 class00.py 
小林 さんは 18 歳です。

上記のようにプログラムから一人の人の情報が出力されました。
クラスからインスタンスを作成することで、まとめた情報を扱うことができます。

クラスは以下のような流れになるので頭に入れておきましょう。

  1. クラスを定義
  2. インスタンスを作成
  3. データ属性・メソッドを利用

複雑になってきますが、定義を覚えれば色々と活用ができます。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!