Developer

【Python独学】インスタンスメソッドの定義
2021.03.01
Lv1

【Python独学】インスタンスメソッドの定義

Pythonは、オブジェクト指向と呼ばれるプログラミング言語の一つです。
今回は、インスタンスメソッドの定義に関する基本的な部分を紹介します。


インスタンスメソッドの定義

クラスとは、「属性」と「実行できること」が記載された設計図のようなものでした。
今回は、「実行できること」について関係する、インスタンスメソッドというものに関して触れていきます。
バイクを走らせることを例として見ていきたいと思います。

インスタンスメソッドとは、「インスタンスが実行できること」を指します。
例えば、バイクに関するMotorBikeクラスから生まれたインスタンスの場合だと、”走る””止まる”がインスタンスメソッドに該当するイメージになります。

では、インスタンスメソッドの定義についてやってみましょう。
まずは、書式を確認してみましょう。

class クラス名:
    def メソッド名(self,引数2,引数3,引数4,・・・) :   #インスタンスメソッドの定義
        ステートメント                             #実行する処理を記述
           ・・・

初期化メソッドの場合と同じくメソッドの第一引数にselfというものがありますが、これは同じくインスタンス自身の参照を表しています。

では、実際にメソッドを定義してみましょう。
今回はバイクに関するMotorBikeクラスについて、「自身の走行距離を加算する(すなわち、走行する)」というようなインスタンスメソッドを定義してみます。

#クラスの定義と初期化メソッド
class Motorbike:
    def __init__(self,color = "black", displacement = "750CC") : #初期化メソッドの定義
        self.color = color
        self.displacement = displacement
        self.mileage = 0

    #インスタンスメソッドの定義
    def bikeRunning(self, mile) : #今回走行した距離をmileという変数で引数に
        self.mileage += mile      #これまでの走行距離mileageに、今回の走行距離mileを加算
        print(f"今回の走行距離は{mile}km。通算の走行距離は{self.mileage}。")

9行目からがインスタンスメソッドの定義になります。
bikeRunningというメソッド名であり、このメソッドは引数で受け取った値(走行距離mile)を、10行目でこれまでの総走行距離mileageに加算しています。
そして、11行目でprint()関数で走行距離を出力するようにしています。

では、このインスタンスメソッドを実行してみましょう。
インスタンスメソッドを実行するには、次の通りの書式で行います。

インスタンス名.メソッド名(引数)

以下では、引数無しで作成したインスタンスに対して、bikeRunningメソッドを2回実行しています。
一度目のbikeRunningメソッドでは引数として100を渡し、
二度目のbikeRunningメソッドでは引数として300を渡します。

#クラスの定義と初期化メソッド
class Motorbike:
    def __init__(self,color = "black", displacement = "750CC") : #初期化メソッドの定義
        self.color = color
        self.displacement = displacement
        self.mileage = 0

    #インスタンスメソッドの定義
    def bikeRunning(self, mile) : #今回走行した距離をmileという変数で引数に
        self.mileage += mile      #これまでの走行距離mileageに、今回の走行距離mileを加算
        print(f"今回の走行距離は{mile}km。通算の走行距離は{self.mileage}km。")

#引数無しで、クラスからインスタンスを作成
bike1 = Motorbike()

 #メソッドを実行
bike1.bikeRunning(100)   #100km分の走行をイメージ
bike1.bikeRunning(300)   #300km分の走行をイメージ
C:\Python> python 13-3-2.py
今回の走行距離は100km。通算の走行距離は100km。
今回の走行距離は300km。通算の走行距離は400km。

出力結果行の2行目、すなわち引数として300を渡した二度目のメソッド実行の際のprint()関数の出力を見ると、mileage(通算の走行距離)は400となっており、通算の走行距離mileageが加算されていっていることがわかります。
これは、インスタンス変数mileageの値が保持されていることを意味します。
それでは、簡単にもう一例見てみましょう。
今度は、インスタンス自身に関する情報を表示するようなメソッドを作成してみます。
Motorbikeクラスのインスタンスにはcolor(形)、displacement(排気量)、mileage(総走行距離)というような属性がありますが、これらがどのような値になっているかを表示するメソッドになります。

#クラスの定義と初期化メソッド
class Motorbike:
    def __init__(self,color = "black", displacement = "750CC") :
        self.color = color
        self.displacement = displacement
        self.mileage = 0

    #インスタンスメソッドの定義
    def show(self) : #メソッド名はshow、引数はselfのみ
        print(f"色:{self.color}")
        print(f"排気量:{self.displacement}")
        print(f"走行距離:{self.mileage}")

#引数無しで、クラスからインスタンスを作成
bike1 = Motorbike()

 #showメソッドを実行
bike1.show()
C:\Python> python 13-3-3.py
色:black
排気量:750CC
走行距離:0

情報を出力させるようなshowメソッドが、問題なく実行出来ていますね。
なお、クラス定義の中ではインスタンスメソッドは何種類でも定義出来ます。

いかがでしたでしょうか。
以上が、インスタンスメソッドの定義の方法でした。


まとめ

インスタンスメソッドは、「インスタンスが実行できること」を指します。
インスタンスメソッドは、初期化メソッドと同じように定義を行います。
インスタンスメソッドは、何種類でも定義出来ます。


確認問題

次のようなプログラムがあります。

class Motorbike:
    def __init__(self,color = "black", displacement = "750CC") : #初期化メソッドの定義
        self.color = color
        self.displacement = displacement
        self.mileage = 0

    def bikeRunning(self, mile) :
        self.mileage += mile

    def show(self) : #引数はselfのみ
        print(f"色:{self.color}")
        print(f"排気量:{self.displacement}")
        print(f"走行距離:{self.mileage}")

bike1 = Motorbike()
bike1.bikeRunning(100)

bike1.mileage = 0
bike1.bikeRunning(300)
bike1.show()

コンソールにどのような出力がされるかを考えてみましょう。
(18行目に要注意)

答えは次回の記事の最後に!
【Python連載】クラス変数・クラスメソッドの定義


前回の確認問題の回答例

前回の記事はこちら→【Python連載】初期化メソッドとインスタンス変数の定義

以下のようなプログラムがあります。

class Car:
    def __init__(self,color = "White") :
        self.color = color
        self.mileage = 0

car1 = Car()
car1.color = "green"
car2 = Car("blue")

print(car1.color)
print(car2.color)

10,11行目のprint()関数での出力がどのようになるかを考えてみましょう。

・以下が解答になります。
green
blue

連載目次

独学で学ぶ Pythonプログラミング 連載目次