この投稿はPythonのクラスの使い方その1の続きになります。
前回は、クラスの定義方法とインスタンスの作成方法について説明しました。
今回は、クラスに定義する操作(メソッド)とメソッドの呼び出し方法について説明していきます。
1. メソッドの概要
メソッドとは、そのクラスがどういう「動き」を持つのかを定義したものです。
前回と同様、人間というクラスを定義します。
class Person: # 人間クラスの定義
#コンストラクタ。クラスがもつ属性の定義と初期化を行う。
def __init__(self,name,age):
self.name = name
self.age = age
上記のクラスは、属性の定義と初期化を行うコンストラクタが定義されています。
このコンストラクタもメソッドの一つです。
コンストラクタ以外にも、クラスには自分で考えたメソッドを定義することができます。
2. メソッドの定義
人間はどんな「動き」を持っているのか考えてみましょう。
例えば、次のような「動き」が考えられます。
・自己紹介をする。
・挨拶をする。
・名前を答える。
・年齢を答える。
これらの動きをメソッドで表してみます。
class Person: # 人間クラスの定義
#コンストラクタ。クラスがもつ属性の定義と初期化を行う。
def __init__(self,name,age):
self.name = name
self.age = age
# 自己紹介をする。
def selfIntroduction(self):
print('Hello! My name is ',
self.name,', I am ',self.age,' years old.')
# 挨拶をする。
def greet(self,greetWord):
print(greetWord)
# 名前を答える。
def answerName(self):
return self.name
# 年齢を答える。
def answerAge(self):
return self.age
メソッドは「def メソッド名(self, 引数):」の形式で定義を行います。
末尾の「:(コロン)」を忘れないよう注意してください。
「引数(ひきすう)」とは、メソッドや関数に渡す値のことです。
前回定義したコンストラクタも、nameとageという引数を定義しています。
引数は、メソッドに必ず必要なものではなく、メソッドの処理に必要ない場合は省略が可能です。
また、カンマで区切って複数の引数を定義することもできます。
selfというのは自クラスのインスタンスになります。これは省略することができません。
メソッドには、「戻り値」というものを定義することもできます。
戻り値とは、メソッドで処理した結果を返却する値のことです。
値を返却する必要がなく、メソッド内で処理が完結する場合は、引数と同様に省略することが可能です。
まとめると、メソッドは以下のパターンで定義することができます。
引数 | 戻り値 |
---|---|
なし | なし |
あり | なし |
なし | あり |
あり | あり |
3. メソッドの利用
前回も述べた通り、Personクラスは「人間とはどういうものか」を定義するものであって、人間そのものではありません。
Personクラスという設計図を元にして作った「インスタンス」が人間そのものになります。
つまり、クラスの中のメソッドも、クラスに定義しただけでは使えないのです。
クラスに定義したメソッドを、インスタンスを介して呼び出すことで初めて利用することができます。
person1 = Person('Yamada',24) # インスタンスの作成
person1.selfIntroduction()
# 実行結果
# Hello! My name is Yamada, I am 24 years old.
メソッドを呼び出す際には、「インスタンス変数名.メソッド名」の形式で呼び出すことができます。
「person1」がインスタンス変数名になります。
インスタンス変数名の後に、メソッド名を指定して呼び出すことで、そのメソッドでの処理が行われます。
メソッドは、 戻り値や引数の有無で呼び出し方が異なります。
呼び出す際に、selfの引数は必要ありません。
引数 | 戻り値 | メソッドの呼び出し方 |
---|---|---|
なし | なし | インスタンス変数名.メソッド名() |
あり | なし | インスタンス変数名.メソッド名(引数に設定する値) |
なし | あり | メソッドの戻り値を格納する変数=インスタンス変数名.メソッド名() |
あり | あり | メソッドの戻り値を格納する変数=インスタンス変数名.メソッド名(引数) |
person1 = Person('Yamada',24) # インスタンスの作成
# 色々なメソッドの呼び出し方
person1.selfIntroduction()
person1.greet('こんにちは')
person1.answerName()
person1.answerAge()
Hello! My name is Yamada, I am 24 years old.
こんにちは
Yamada
24
このように、メソッドを定義することで様々な処理を行うことができます。
初めのうちは、メソッドを定義する際に、引数や戻り値の有無が判断できずに少し戸惑うかもしれませんが、「どんな動きをすればいいか」を考えて、その動きを実現するためには別途情報が必要か(※引数の有無)、結果を返す必要があるのか(※戻り値の有無)を考えていくと、自ずと判断できるようになってきます。
弊社主催のPython基礎研修では、基礎文法を始め、Python未経験の方でもわかりやすいカリキュラムでPythonの基礎をマスターできます。
講座は随時開催しておりますので、ご興味のある方は是非お気軽にお問い合わせください。