Pythonのclassとは?基本概念や使い方を解説

19/01/09 18:37:33     19/05/05 16:58:45

Pythonのクラスって?

Pythonだけでなくオブジェクト指向型のプログラミング言語ではクラスの概念が重要になります。クラスの概念は基本なので早めに理解しておきたいのですが、クラスを理解するためにはそもそもオブジェクト指向とは何かといったことや、クラスとセットで使われるオブジェクトやインスタンスなどの概念についても知る必要があります。

今回丁寧に説明していきますが、やはり初めてだとわかったようなわからないような印象で終わってしまう可能性が高いでしょう。ただし今回ある程度理解しておけば今後実際にいろいろコードを書いていて理解が深まっていくはずなので、ぜひ概念や用語の意味合いを捉えておいてください。

推奨はできませんが、実際のところクラスやオブジェクトの概念がよくわからないままコードを書いている人もいます。ルールに従って記述していけばそれでもプログラムは完成するので、仮に今回よくわからなくても、心配せずにどんどん学習を進めていってください。

オブジェクト指向とクラスの関係

クラスの概念を理解するためには、その大本となるオブジェクト指向について理解する必要があります。クラスの概念は、オブジェクト指向の概念の一部です。なので、先にオブジェクト指向について解説します。

オブジェクト指向の定義についてはいろいろなことが言われますが、重要なポイントとしては「クラスからオブジェクトを作る仕組み」ということです。まずクラスがオブジェクト指向における設計図のようなものです。

Pythonではクラスという設計図を最初に作成し、その設計図を元にオブジェクト、つまり実際に処理を実行するソースコードを作り出すのです。このクラスからオブジェクトを作成する過程のことをインスタンス生成と言うこともありますが、いずれにしてもクラスからオブジェクトを作る、という基本構造を意識しておけば混乱することは減るかと思います。

なぜクラスからオブジェクトを作るのか

オブジェクト指向とクラスの関係は上記の通りですが、なぜわざわざこのような複雑な構造を採用しているのでしょうか。その理由は、クラスという設計図を用意することで、オブジェクトを複数作った際の冗長さを排除できるからです。

クラスがあればオブジェクト生成時にクラスの機能を呼び出すだけで済みますが、もしクラスがなければ毎回すべての処理を記述することになります。たとえば処理の多いメソッドなどを毎回書くのは明らかに冗長で読みにくくなるので、ソースコードを書く人にとっても読む人にとってもオブジェクト指向にはメリットがあります。

特にオブジェクト指向言語を始めたばかりの頃は構造の意味がよくわからず、なおかつクラスを作ることの煩雑さしか感じられないかもしれません。なぜなら、クラスに対してオブジェクトの数が少ないと、クラスを作らずに直接処理を書いた方がコードが短くなることもあるからです。

オブジェクト指向の恩恵を受けるためにはオブジェクトの数がある程度増える必要があり、オブジェクト指向に慣れてきた頃にようやくメリットを感じられます。またクラスは自分自身が作成したものだけでなく、外部からインポートしてきてオブジェクトを作ることも可能です。

外部のクラスは凄腕のエンジニアが作成したものばかりなので、それを元にオブジェクトを生成すれば、簡単に高機能な処理を実行できます。オブジェクト指向は自分でクラスを作るだけでなく、外部からインポートするという観点でも役立ちます。

オブジェクト指向に関するその他の重要概念

クラス、オブジェクト、インスタンス、といった用語の意味合いや関係性はある程度把握できたかと思います。この三つの用語の意味と関係がオブジェクト指向の根幹なので、ここを押さえることがまずは重要です。

そのうえでよりオブジェクト指向を詳しく知るためには、コンストラクタ、メソッド、継承、ポリモーフィズム、といった概念が重要になります。ただしあくまでも最重要ワードはクラス、オブジェクト、インスタンスなので、この三つの概念の下にコンストラクタや継承が入ってくるイメージです。

コンストラクタとは

コンストラクタはクラスからオブジェクトを作るときに実行する、メソッド、関数のことです。メソッド、関数についてはすでにご存じの方が多いかと思いますが、クラスのなかにある処理のことです。

クラスには処理が記載されており、クラスから作られたオブジェクトはこのクラスの処理を利用して実際に動きます。クラスのなかのどのメソッドを使用するかはオブジェクト側に記述するのですが、オブジェクトを作成した際に自動的に実行されるメソッドがコンストラクタということです。

継承とは

継承とは、クラスの機能を別のクラスに引き継ぐためのものです。オブジェクト指向のメリットはクラスの利便性ですが、継承もオブジェクト指向におけるクラスの利便性を大幅に高めている概念の一つです。

継承される側のクラスを親クラス、継承するクラスを子クラスと呼びます。具体的な書き方などは今後知っていけば良いのですが、今回は継承という概念が存在する、ということだけ押さえておけば良いかと思います。

ポリモーフィズムとは

ポリモーフィズムとは、そのまま和訳すると多様性という意味です。ポリモーフィズムも徐々に把握していけば良いかと思います。ポリモーフィズムは継承との関係性が強く、継承をうまく活用することでポリモーフィズムを実現できます。

継承することで親クラスから子クラスに機能を引き継げると説明しましたが、いろいろな子クラス作ることで、最初の親クラスとは別物のクラスが複数できます。これがポリモーフィズムの概念ですが、どこまで多様性が増せばポリモーフィズムに該当する、といった明確な定義はありません。

なので、何がポリモーフィズムなのかを深く考えるのではなく、オブジェクト指向で実装するとポリモーフィズムというメリットがある、といった形で捉えておくと良いかと思います。

Pythonのビルドについて

ビルドとは人間の書いたプログラムを機械語に翻訳する作業です。似たような言葉にコンパイルというものがありビルドとの違いがわかりにくいのですが、明確に区別する必要は特にないかと思います。気になる方は、調べてみてください。

どちらも同様にプログラムを二進数に変換する作業を考えておくと良いでしょう。次にプログラミング言語にはビルドが必要なコンパイラ型言語と、ビルドが不要なインタプリタ型言語があります。

Pythonはインタプリタ型の言語なので基本的にはビルドが不要なのですが、バイトコンパイルというものでより機械語に近い形に変換することが可能です。このバイトコンパイルという処理を行うと「.py」や「.pyc」といったファイルが生成されます。

このファイルを生成することで、ファイルの読み込みが速くなります。ただしインタプリタ型言語の場合バイトコンパイルをしていなくても実行可能な状態で読み込むので、バイトコンパイルしているかどうかによって処理速度が変わるわけではありません。

あくまでも、読み込むまでのスピードが速くなるだけです。以上オブジェクト指向やクラスの概念について解説してきました。これらの概念を理解しないままプログラミングすると混乱したり上達につながりにくかったりするので、なるべくならきちんと理解した方が良いです。

ただし完璧に理解するのも困難で、それを目指していると先に進みません。なので、混乱しない程度にバランスよく理解しながら学習を進めてください。

Pythonのフリーランス案件をチェック

→Pythonの案件情報一覧はこちら

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する