Python

【Python初心者】クラスの基本定義とコードの書き方を解説する。

こんにちは(@t_kun_kamakiri)(‘◇’)ゞ

この記事では、Pythonのクラスについて解説します。

この記事では主に「Pythonクラスの書き方」について解説しました。

【前半】
「Pythonクラスの書き方」
を解説しています。
ただクラスって何?っていう人もいますよね。【後半】

  • クラスとは何か?
  • Pythonクラスの基本的な使い方
  • インスタンス化

「クラスの継承」までは話が難しくなるので「クラスの継承」は次回の記事にします。

この記事はこんな人のために書きました。

この記事を読むと
  • Pythonのクラスのコードの書き方を知りたい人
  • クラスとは何かを知りたい人
  • クラスの使い方を知りたい人
クラスについてとても基本的なことをまとめましたので参考にしてください。
使用環境を示しておかないと混乱しそうなのでちゃんと書いておきます(^^)/

【Pythonの使用環境について】
Anaconda
Google Colaboratory
当ブログはこれをメインに使った計算結果です。

関連記事

☟書籍も紹介しておきます。
こちらの本がPython初心者が挫折することなく勉強できる本です。
(本記事のようのPython使用環境と異なりますが、とてもわかりやすいので全く問題ありません)

スポンサーリンク

よく「クラスとは設計図である・・・・だから、クラスには実体がないからクラスのインスタンス化を行って・・・」と理解できない解説がされていますが(笑)

クラスとは

クラスとは、「オブジェクトの生成のためのひな型」です。
簡単に言うと、クラスは「何かを作る(処理する)ための指示が書かれたもの」ってことですね(^^)/

カマキリ

もっとわかりやすく、クラスとは一言でいうと?

 

クラスとは「処理をひとまとまりにしたもの」!

 

プログラミング言語には「関数(メソッド)」というものがあります。
関数(メソッド)とクラスの違いは以下を見てください。

  • 関数(メソッド)には、主に何かをするという処理が書かれています。
    (もちろん変数も関数の中で定義できます。)
  • クラスには、変数と1つ以上の関数(メソッド)を持つことができます。

Pythonのクラスの書き方

では、さっそくPythonでのクラスの書き方について解説します。

Pythonでのクラスの書き方の手順は以下の通りです。

Pythonのクラスの書き方
  1. クラスを定義する
    1-1.データ(変数)を書く
    1-2.メソッド(処理)を書く
  2. クラスのインスタンス化を作成する
  3. インスタンス化したモノからメソッドを呼び出す

 

実際にコードで書く際のフォーマットは以下です。

 

例1:クラスのインスタンス化までする

カマキリ

実際にコードを書いてみよう!

いきなり難しいことをやっても理解ができず詰むだけです。
まずは、単純なプログラムから動くことを確認しつつ、どのような処理が行われているのかをひとつひとつ丁寧に見ていく方が良いでしょう。

ここで行うのは以下の2つです。

  1. クラスを定義する
  2. クラスのインスタンス化を行う

 

はじめて学ぶ人はコピペして動作を確認してみてください。

実行結果

#2.でクラスのインスタンス化までを行いました。
それをprint文で出力すると「__main__.kamakiri」と出力されているのがわかります。

これは、「<自身のファイルの>.<kamakiriというクラス>というオブジェクトですよ」という意味です。

例2:インスタンス化したクラスから変数(データ)を呼び出す

次は実際に作成したクラスを使って、クラスの中の変数(データ)を呼び出してみましょう。

ここで行うのは以下の3つです。

  1. クラスを定義する
  2. クラスのインスタンス化を行う
  3. クラスの中の変数(データ)を呼び出す

 

はじめて学ぶ人はコピペして動作を確認してみてください。

実行結果

クラスの中の変数を呼び出すときは、「<インスタンス化したクラス名>.<クラスの中の変数>」という形で書きます。

例3:インスタンス化したクラスから処理(メソッド)を呼び出す

次は実際に作成したクラスを使って、クラスの中の関数(メソッド)を呼び出してみましょう。

ここで行うのは以下の3つです。

  1. クラスを定義する
  2. クラスのインスタンス化を行う
  3. クラスの中の変数(データ)を呼び出す

 

はじめて学ぶ人はコピペして動作を確認してみてください。

実行結果

クラスの中の処理(データ)を呼び出すときは、「<インスタンス化したクラス名>.<クラスの中の関数()>」という形で書きます。

※ここでひとつ注意です。

クラスの中の変数を呼び出すときは変数「クラスの中の変数」を「.(ドット)」の後ろに書けばよかったのですが、クラスの中の変数を使う場合は「変数(データ)と関数(メソッド)を区別するために()カッコ」が必要です。

これは、クラスの中の関数を呼び出す際に引数を渡すことができるためです。

  • 何も引数を渡さず関数の中の処理だけを行う場合()の中は何も書かない
  • 関数に引数を渡して関数の中の処理を行う場合()の中に引数を書く

このくらいの違いだと考えてください。

ところでなぜ「def name_function(self):」といふうに関数の引数に「self」と書く必要があるのでしょうか?
その答えは「例5」でお話ししましょう!

では、次に関数に引数を渡す場合をやってみましょう。

例4:クラスの中の関数に引数を渡す

次は実際に作成したクラスを使って、クラスの中の関数(メソッド)を呼び出してみましょう。

ここで行うのは以下の3つです。

  1. クラスを定義する
  2. クラスのインスタンス化を行う
  3. クラスの中の関数(メソッド)に引数を渡して呼び出す

 

はじめて学ぶ人はコピペして動作を確認してみてください。

実行結果

「instance.name_function(10,20)」とすることで、クラスの中の関数の引数に「10と20」が引き渡されて「x+y=10+20=30」という処理が行われました。

例5:クラスの中に初期化設定(__init__)を書く

例4までの例では「クラスのインスタンス化」を行って「クラスの中の処理を実行」を行っていましたが、
ここではクラスをインスタンス化した時点でクラスの中の関数を実行するという「__init__メソッド」というものを使います。

ここで行うのは以下の5つです。

  1. クラスを定義する
  2. __init_メソッドを書く
  3. クラスのインスタンス化を行う(初期化したい引数を渡す)
  4. クラスの中の変数(データ)を呼び出す
  5. クラスの中の関数(メソッド)に引数を渡して呼び出す

 

はじめて学ぶ人はコピペして動作を確認してみてください。

実行結果

このようにクラスをインスタンス化した段階で関数が実行させるので便利ですよね。

例3でも疑問に思ったところだと思いますが、
なぜ「def name_function(self):」といふうに関数の引数に「self」と書く必要があるのでしょうか?

「self」というのは自分自身・・・つまりクラス名「kamakiri」自身という意味になのです。

  • selfは自身のクラスの中の変数を使うという意味。
  • インスタンス化された中の変数を使うという意味。
↓のプログラムの例では、「self.name1」や「「self.name2」などは「kamakiri.name1」「kamakiri.name2」という意味になります。

 

↓以下がPython初学者のためのお勧めの参考書です。

 

カマキリ

ここまででPythonのクラスの書き方については終わりです。

ここまではPythonでのクラスの書き方についてでした。
この記事を読んでいる方はおそらく「クラスとは何か?」というよりは「Pythonでどうやってクラスを書くのか?」という疑問をお持ちの方だろうと想定しています。

Pythoのクラスの基礎はわかった人はここまでで十分なのですが、「そもそもクラスって何?」って方のために以下でクラスの概念についてさらっと解説をしておきます。
以降は、クラスの概念についてのお話をします。

クラスについて

クラスを知る前に「オブジェト指向」というのを知る必要があります。
カマキリ

オブジェクト指向と言われても、何それって?

オブジェクト指向の3大要素と言われる「カプセル化」、「継承」、「ポリモーフィズム」です。
  •  カプセル化
    できるだけ他のプログラムから干渉されないように/他のプログラムに干渉しないようにする仕組み
  •  継承
    再利用性を高める考え方
  •  ポリモーフィズム
    振る舞いを様々に変えられる仕組み

 

プログラミングの中身を知られたくないとかありますよね。
プログラムでの処理をひとまとまりにして他のプログラムとは離しておいて保管・・・
そして、「ちょっとこの処理を使って編集したい」ってときに、「クラスの継承」というのを使って再利用・・・
カマキリ

クラスって便利です。

実際、プログラミングでクラスを作ってしまうとまとまりは良くなるのですが、正直どこに処理がまとまっているのかわかりにくくなります。
では、なぜクラスを作るでしょうか。メリットは何でしょうか?

クラスを作っておくことのメリット

クラスを作るメリットとして以下が挙げられます。
  • よく使う処理をclassで予め作成しておくことで、同じコードを何度も書く必要がない。
    DRY(Don’t Repeat Your Self)原則と呼ばれ、日本語で繰り返し同じ処理を書くことを避けるという原則
  • 処理の中身が知らなくても何かをインプットしたら何かがアウトプットされるという仕組みを使うことができる。

 

超簡単に言うと、クラスを使うことで「中身なんもわからん」って状態でも、
何をインプットすれば何がアウトプットされるのかさえ知っていれば誰でも自由に使いこなすことができるのです。
関連記事もどうぞ

COMMENT

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