そう思ったことありませんか?
どーもTakeです。
この記事では、Python のclass(クラス)とは?その使い方について簡単に解説します。
class(クラス)というと設計図とかオブジェクト指向における概念とかいろんな表現がありますが、
わたしはプログラミング初心者のうちはさっぱりわかりませんでした。
「やってくうちに何となく必要性がわかってくる」そういうものだと思います。
ですがclass(クラス)という考え方は初めのうちはどうしても難しいため、
この記事ではPython のclass(クラス)について図をつかって簡単に解説します。
- Python のclass(クラス)について
- Python のclass(クラス)の使い方
Python のclass(クラス)について
class(クラス)を説明する上で必要なキーワードが三つあります。
これらを順に説明します。
- クラス・・・設計図のこと
- インスタンス・・・設計図をもとに実際に作ったもの
- オブジェクト指向・・・クラスをつかって開発する手法のこと
クラスとは?
class(クラス)とはイメージは設計図と思ってください。
もっと簡単に言うと変数と関数をまとめたものと思っておけばOKです。
たとえば、Python で Human(人間)を作ってみようと思います。
Human(人間)には名前、身長、体重といった様々な要素があり、話したり歩いたりいろんな動作もあります。
それをPython でHuman(人間)をクラスにしようとすれば「要素 = 変数」「動作 = メソッド」になります。
これら「変数」「メソッド」をまとめて定義したものがクラスです。
インスタンスとは?
クラスを理解する上で次に出てくる重要なキーワードが「インスタンス」です。
「インスタンス」とはクラス(設計図)として宣言したときの実体化させたもの
(設計図をもとに実際に作ったもの)のことです。
「Human(人間)クラスをつくりました!じゃあソースコードで呼び出して使うで!」ってなったとき
どう呼び出すか?って考えてください。
おそらく「tanaka = Human()」という風に書くことになります。その「tanaka」っていうものが「インスタンス」です。
つまりクラスというのはあくまで「設計図」であり、その設計図をもとに実際に作ったものがインスタンスです。
オブジェクト指向とは?
また class(クラス)を学んでいくと「オブジェクト指向」という言葉がでてきます。
「オブジェクト指向」とは class(クラス)をつかって開発していくプログラミング手法のことです。
Python のclass(クラス)の使い方
では プログラミングで Human(人間)クラスを作ってみようと思います。
- 名前 ・・・ 変数 name として定義する予定
- 身長 ・・・ 変数 height として定義する予定
- 体重 ・・・ 変数 weight として定義する予定
この構成で Human クラスを定義します。
下記のように Human クラスは def で定義されるメソッド(関数)と変数(name、height、weight)で構成されてます。
1 2 3 4 5 6 7 |
# クラスの定義 class Human: def __init__(self,name,height,weight): self.name = name self.height = height self.weight = weight |
※「__init__」はいったん無視してください。あとで説明します。
クラスとはこのように変数と関数をまとめた設計図だと理解すれば最初はOKです。
ではこの Human(人間)クラスから「田中(tanaka)さん」を作ろうと思います。
下記ソースコードの一番下で「tanaka = Human("tanaka",170,50)」とあります。
この tanaka は Human クラスで定義したものでインスタンスといいます。
1 2 3 4 5 6 7 8 9 10 |
# クラスの定義 class Human: def __init__(self,name,height,weight): self.name = name self.height = height self.weight = weight # 実行部分 tanaka = Human("tanaka",170,50) |
この tanaka を宣言した際、Human クラスで「__init__」が呼び出されます。
この「__init__」をコンストラクタと呼びます。
コンストラクタとはクラスを呼ば出した際(つまりインスタンスが定義されたとき)に
最初に呼ばれるメソッド(関数)のことです。
そして「__init__」コンストラクタには引数(self, name, height, weight)があります。
「tanaka = Human("tanaka",170,50)」と宣言したため、name = "tanaka"、 height = 170、weight = 50 と値が代入されます。
ここで「あれ? self は?」となると思います。
「self」はインスタンス自身を意味する慣用語であり、そのメソッド内でクラスの変数を使用する場合に呼び出しが
必要であるため記述されており、引数ではありません。
もっと簡単に言うとクラスには「name, height, weight」という3つの変数があり、
「self」はそれら変数を呼び出すために必要なだけです。
- クラス・・・設計図のこと、変数と関数をまとめたもの(Human クラス)
- インスタンス・・・クラスを呼び出したもの(tanaka = Human("tanaka",170,50))
- コンストラクタ・・・クラスを呼び出した時に最初に処理するメソッド(「__init__」関数)
※ コンストラクタの逆に「デストラクタ」も存在します。
これはインスタンスが破棄されたタイミングで呼び出される処理のことです。
クラスの変数とメソッドの呼び出し
クラスで定義した変数とメソッドの呼び出し方法です。
- 変数・・・インスタンス名.変数
- メソッド・・・インスタンス名.メソッド
具体的にソースコードで説明します。
先程と同様 Human クラス内にある変数とメソッドを呼び出します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# クラスの定義 class Human: def __init__(self,name,height,weight): self.name = name self.height = height self.weight = weight def hello(self,): print("おはよう") # 実行部分 tanaka = Human("tanaka",170,50) print(tanaka.name) tanaka.hello() ## 実行結果 tanaka おはよう |
上記ソースコードで「#実行部分」を確認してください。
まず定義した Human クラスのインスタンスである tanaka を定義します。
その際に引数に Human("tanaka",170,50)とすることで name = "tanaka"、 height = 170、weight = 50 と値が代入されます。
そして「tanaka.name」とすることでクラス内の変数 name = "tanaka" を呼び出しできます。
最後に「tanaka.hello()」と呼び出すことでクラス内のメソッド hello の処理が実行され「hello」と表示されます。
最後に
いかがでしたでしょうか?
この記事では、Python のclass(クラス)の使い方について解説しました。
- クラス・・・設計図のこと
- インスタンス・・・設計図をもとに実際に作ったもの
- オブジェクト指向・・・クラスをつかって開発する手法のこと
- コンストラクタ・・・インスタンスが定義されたときに呼び出される処理
- デストラクタ・・・インスタンスが破棄されたときに呼び出される処理
クラスを学び際はとりあえず上記5つのカタカナを理解する必要があります。
私も最初はまったくわからなかったですが、いろいろと開発していくうちに覚えました!
ぜひいろいろなクラスをつくってクラスをマスターしていただければと思います。
ではでは。