「クラスって何だろう」
「クラスっていつ使うの」
そう思った方はいませんか?Pythonを学習すると何度も出会うのがクラスです。今回は、Pythonのクラスの使い方から実践的な使用方法までの基本を解説します。
初学者の方は、本日の内容が難しいと感じるかもしれませんが、心配しないでください。経験者も何度もコードを書き、時間をかけて理解できるのが本日の内容です。今回はコードを自分で試して、挙動を確認するようにしてください。
Pythonのクラスとは
「クラス」はよく「設計図」に例えられます。わかりずらい人は料理のレシピと考えると良いでしょう。何度も同じ味の料理を作るには、食材の種類や量、調味料の調合が決められていると便利です。同様に決まったデータ処理をするなら、その処理方法が必要なのです。この決まった処理方法のことを「クラス」と呼ぶのです。
classの役割
クラスを理解する上で、欠かせないのが、「オブジェクト」、「クラス」、「インスタンス」の3つ言葉で、それぞれに関連があります。易しく理解するために、「クラス」、「インスタンス」、「オブジェクト」の順に見ましょう。
クラス
クラスは、データを処理するレシピです。私たちは、まずこのレシピを作るのです。レシピに食材の分量、調理法が書かれているように、クラスにはデータ処理の方法を定義します。ここが間違えば、間違った結果が生まれます。
インスタンス
クラスというレシピから実際に作った料理を「インスタンス」と呼びます。インスタンスとは、クラスを実体化させたものです。
オブジェクト
オブジェクトとは、クラスとインスタンスの2つを、まとめた考え方と考えてください。Pythonでのオブジェクトは「データを抽象的に表したもの」と表現されています。
classの基本的な使い方
では、実際のコードを参照しながらクラスの基本的な使い方を見ていきましょう。
クラスの宣言
最初に、クラスを「宣言」します。次は、最もシンプルな宣言です。
class SampleClass ( ) : |
上記のサンプルコードは、「SampleClass」という名前の何の処理もない空のクラスです。
クラスを利用する(インスタンス化する)
Pythonのクラスを利用するには、クラスの中にインスタンスを生成します。次のサンプルコードは、SampleClassのインスタンスを生成し、クラスのsay()メソッドを呼び出す例です。
class SampleClass ( ) : def say ( self ) : print ( ” Hello World ! ” )classInstance = SampleClass ( ) classInstance . say ( ) # – > ” Hello World ! “ |
上記のように、クラスのメソッドを呼び出す場合は、クラスをインスタンス化したものを格納した変数から、クラスのメソッドを呼び出します。
Pythonのクラスの実践方法・具体例
ここからは、より実践的にPythonのクラスの使用方法について解説します。
メソッドを定義する
まずは、基本として、クラスの中でメソッドを作る方法を解説します。
メソッドとは、一定の結果を生み出す処理です。例えば、「野菜を切る」、「炒める」、「調味料の調合」などの各工程の処理を決めるイメージです。この工程が決まれば、クラスを使うことで画一的処理ができます。
このような小規模な処理の塊をメソッドと呼ぶのです。これには名前がついており、クラスを利用するときには、メソッド名を使うことで、メソッド内の処理をまとめて実行できます。Pythonのメソッドは、”def”キーワードの後に任意のメソッド名を指定します。
class MyClass ( ) : def sample _ method ( self ) : # ここにメソッド内の処理を記述する ・・・ |
Pythonでは、クラスにメソッドを定義する場合、必ずメソッドの第一引数にクラスのインスタンスを表すオブジェクトを受け取る必要があります。
また、第一引数の名前は「self」とするのが慣習です。引数は、「いんすう」ではなく、「ひきすう」と呼びます。
引数があるメソッド
次に引数を受け取るメソッドを定義してみましょう。引数はメソッドの第二引数以降に引数名を記述します。複数の引数を受け取る場合は、カンマ区切りで引数を宣言します。
class MyClass ( ) : def sample _ method ( self , arg1 , arg2 ) : # ここにメソッド内の処理を記述する ・・・ |
戻り値を返すメソッド
戻り値とは、処理の結果を示す処理です。Pythonでは、メソッドに戻り値に関する宣言は必要なく、処理の中で戻り値をreutrnで返すと、戻り値があるメソッドとして扱われます。
class MyClass ( ) : def sample _ method ( self , arg1 , arg2 ) : # ここにメソッド内の処理を記述する ・・・ |
インスタンス変数
インスタンス変数とは、そのインスタンスだけで使う変数です。クラスのインスタンスが異なれば、それぞれ別の値が格納されます。
次のサンプルコードは、ユーザー名と年齢を格納するインスタンス変数を、クラスに宣言する例です。また複数のインスタンスを生成し、インスタンスごとに別々の値が保持できることも確認しています。
class MyClass : user _ name = None # インスタンス変数の宣言 age = None # インスタンス変数の宣言 def say ( self ) : print ( “名前:{ 0 }、年齢:{ 1 }” . format ( self . user _ name , self.age ) ) # 1つめのインスタンス user1 = MyClass ( ) user1 . user _ name = ” 山田 “ user1.age = 20 # 2つめのインスタンス user2 = MyClass ( ) user2.user _ name = ” 鈴木 ” user2 . age = 40 user1 . say ( ) user2 . say ( ) |
■ 上記コードの実行結果
名前:山田 、年齢 : 20 名前:鈴木 、年齢 : 40 |
コードの実行結果を見ても分かる通り、インスタンス変数にはインスタンスごとに別々の値を保存できます。
コンストラクタ
クラスのメソッドを学習すると、皆さんは、「コンストラクタ」という言葉に出会うと思います。これは、クラスの初期設定などを行うためのメソッドのことです。コンストラクタとは、クラスのインスタンスを生成した時に自動的に呼び出されます。コンストラクタは「init」という名前でメソッドを定義します。では、コンストラクタの宣言方法について解説します。
class MyClass : fruits = [ ] def __ init __ ( self ) : print ( “コンストラクタが呼び出されました!” ) # 初期化 self . fruits . append ( “パイナップル” ) self . fruits . append ( “メロン” ) self . fruits . append ( “イチゴ” ) instance = MyClass ( ) print ( instance.fruits ) |
■ 上記コードの実行結果
コンストラクタが呼び出されました! [ ‘ パイナップル ‘ , ‘ メロン ‘ , ‘ イチゴ ‘ ] |
コードを実行すると、次の内容がコンソールに出力されます。クラスのインスタンスを生成する事で、MyClassのコンストラクタが呼び出されています。「__init__メソッド」がこれを意味します。
デストラクタ
デストラクタはコンストラクタの逆で、クラスのインスタンスを削除するときに使うメソッドです。コンストラクタは「del」という名前でメソッドを定義します。
class MyClass : fruits = [ ] def __ del __ ( self ) : print ( “デストラクタが呼び出されました!” ) |
クラスを継承する
「継承」とは、元となるクラスのインスタンス変数や、メソッドを別の機能でも使えるようにすることです。継承したクラスに新しいメソッドを追加したり、元となったクラスのメソッドを拡張したりもできます。
また、継承を使うことで同じような機能のクラスを作る時に、わざわざ同じような処理を作らなくてよいため、効率的に開発できます。では、クラスを継承する例を見てみましょう。
# 継承元のクラス class Base : base _ val = ” 継承元のインスタンス変数 “ def base _ function ( self ) : print ( “base_function = ” + self . base _ val ) # Baseを継承したSubクラス class Sub ( Parent ) : sub _ val = ” 継承先のインスタンス変数 “ def sub _ function ( self ) : print ( “sub_function= : ” + self . base _ val ) print ( “sub_function= : ” + self . sub _ val ) sub = Sub ( ) sub.base _ function ( ) sub.sub _ function ( ) |
クラスを継承する時のポイントは、継承先のクラスを宣言する時に「class Sub(Parent):」のように括弧内に継承元のクラスを指定することです。また、サンプルコードでは、継承先のクラスで新たに「sub_function」定義しており、その中で継承元のクラスのインスタンス変数を参照しています。上のサンプルコードを実行すると次のような結果になります。
▪️ 実行結果
base _ function = 継承元のインスタンス変数 sub _ function = : 継承元のインスタンス変数 sub _ function = : 継承先のインスタンス変数 |
まとめ
今回は、Pythonでクラスを宣言する方法と、具体的なクラスの使い方について解説してきました。Pythonの機能作成で、くこのクラスの概念は重要で、避けては通れません。
ただ、「正直難しい」と感じた方もいるのではないでしょうか?その感覚は誰もが同じです。実際に機能を作る経験を繰り返すことでしか、深い納得は得られません。
一つ一つの基本的なコードの挙動をある程度理解すれば、先に学習を進めることをおすすめします。その後で学ぶ知識と合わさって、今回のクラスの使い方や継承について学習の理解が進みます!
プログラミングの家庭教師『Tech Teacher』
引用元:Tech Teacher
「スクールに通い続ける自信がない…」
「時間がなくてスクールに通えない…」
そんな方にはプログラミングの家庭教師『Tech Teacher』がおすすめです。
Tech Teacherはマンツーマン指導なので、生徒様一人ひとりに最適な指導を行うことができます。また、オンライン指導も可能なので、全国どこにいても家庭教師の授業を受けることができます。
Tech Teacherの3つの特徴
生徒様に最適化されたマンツーマン指導
完全マンツーマンの指導なので、生徒様の目的・学習状況・ご要望に合わせて、最適な指導をご提供いたします。
指導力・人柄・相性の優れた教師のご紹介
Tech Teacherには採用率20%の選考を突破した、指導力の高い教師が在籍しています。また、選考では指導力だけではなく人柄も重視しております。
1,000人の教師が在籍!幅広い指導に対応可能
業界トップレベルの1,000人の教師が在籍しています。そのため、幅広い言語・ツール・目的に対応することができます。
家庭教師ならではの5つの魅力
オーダーメイドのカリキュラム
生徒様一人ひとりに習熟度・目的・期間に応じて最適なカリキュラムを提供いたします。
きめ細やかなフォローが可能
生徒様からのご要望にきめ細やかに対応し、学習計画や勉強法などの指導もできるので、普段の勉強も捗ります。
習い事・学業・お仕事との両立が簡単
教室に通う必要がないので親御様の送迎も不要です。授業時間・頻度を生徒様のご都合に合わせて自由に調節することができます。
自分のペースで進められる
生徒様の理解度や意欲に応じて授業のスピードを調節できます。不明点や疑問点は都度立ち止まって解消できるので、着実に理解して進むことができます。
すぐ質問できるから挫折しない
先生を独り占めできるので、周りの目を気にすることなく分からないところをいつでも質問できます。