ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

【Python】クラスとオブジェクト指向の考え方

今回はPythonのクラスとオブジェクトの考え方についてわかりやすく解説します。この記事はPythonのクラスやオブジェクト指向の考え方がしっくりこない、という人を読者に想定しています。具体的なクラスの作り方については触れませんのでご注意下さい。

目次

クラスとオブジェクト指向の考え方

それではクラスとオブジェクトの考え方について解説していきます。まずはオブジェクトとは何かを説明した上でクラスとオブジェクト指向について解説します。

オブジェクトとは何か

オブジェクトのイメージ図
いくつかの関数とデータまとめて束ねたモノがオブジェクト
いくつか関数とデータを合わせてひとまとめにしたモノです。関数に渡す引数を固定値で持っていたり、受け取ったりするために変数が用意されています。このように関数とデータ(を取り扱うための変数)をセットで持っているのがオブジェクトです。

念のため関数について復習しておきます。

関数とは

関数とは機能の事です。もっといえば、関数は機能を持ったひとかたまりのプログラムのことです。たとえば、「受け取った値を2倍して1を足した数を返す」という関数(=機能)であれば、3を渡せば計算をして7が返ります。計算以外の例えでは、エクセルファイルを開くと言うような機能が考えられます。このような機能のことを関数と言います。

そしてオブジェクトが持っている関数のことを特に、メソッドと言います。

なお、自分で関数を作る方法に関しては【Python】ユーザー定義関数を作る|def文で解説しています。

オブジェクトは何のためにあるのか

自分で関数を作る事ができるのであれば、それをオブジェクトにまとめておく必要なんて内容に思いませんか?実際、オブジェクトを用意しなくても、関数を自分で作ればプログラムを組むことは可能です。しかし、ある処理に関する機能が沢山あるときひとまとめにしておくと便利なことがあります。

○○に関する処理は○○というオブジェクトにまとめておいて、○○.△△と言う具合にまとめておくことで何をやっているのか、○○の中の関数の中身を確認しなくても分かるようになります。ブラックボックス化と言い、これがオブジェクトにまとめてこうメリットです。ブラックボックス化というと悪いイメージかも知れませんが、それは次で述べるクラスという所にまとめて書かれているので、むしろ中身の確認はしやすくなっています。

中身は確認しなくても分かるけど、確認しようと思えば簡単に確認できる。これがオブジェクトを作る理由です。

クラスとは何か

クラスとはオブジェクトの設計図のことです。上でオブジェクトの概念図を示しましたが、この図で言えば、メソッドが4つあってそれぞれ2つもしくは1つの変数を持っている。それぞれのメソッドは○○という機能を持っていて、、、と書いてあるのがクラスです。

クラスはオブジェクトの設計図なので、そのままでは使えません。クラスからオブジェクトを生成してオブジェクトを使う事になります。

オブジェクト指向の考え方

オブジェクトとしてまとめていないと関数の定義をベタッと書いていくことになります。Pythonはpyファイルを呼び出して実行する事ができました。関数をpyにまとめておくこともできました。さらにクラスを別pyファイルにまとめておけば、機能はオブジェクトが持っているため、ある処理をするのに必要な機能が詰まった.pyファイルと順に機能を呼び出す.pyに分けることができるようになります。つまり、機能と処理の流れを分離することができるようになります。

これこそがオブジェクト指向の考え方です。

クラスとオブジェクト指向の考え方まとめ

以上、クラスの基本的な考え方を解説しました。まとめると下記の様になります。

  • オブジェクトはいくつかの関数とデータを束ねたモノ
  • 関数は機能
  • オブジェクトに束ねられた関数はメソッドと呼ばれる
  • 機能と処理の流れを分離するのがオブジェクト指向

Pythonにはあるクラスの機能(=関数、メソッド)を引き継いでそのメソッドを持ったクラスを作る継承という高度な使い方もあります。まずは機能と処理の流れを分離する考え方をマスターしましょう。

<関連記事>