クラス_2(Python_22)

この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、クラスについて学びました。空のクラスを作って結果を確認してみました。Pythonって結局全部オブジェクトなんですね。

今回もクラスです。中身を充実していきましょう。

インスタンス変数

クラスから作成されたオブジェクトのことを、「インスタンス」と呼ぶことがあります。クラスから作成された実態ということを強調する場合に使います。クラスAからオブジェクトBが作られた場合、「オブジェクトBは、クラスAのインスタンスです」と言ったりします。たいていの場合、「オブジェクト」と「インスタンス」は同じ意味となります。

クラスから作成されたインスタンス(オブジェクト)は、内部に変数(インスタンス変数)を設定できます。以下のように記述します。

インスタンス.インスタンス変数

以下のスクリプトを実行してみましょう。

class ClassTest:
    pass

c1 = ClassTest()
c2 = ClassTest()
c1.name = 'Tom'

print(c1.name) # Tomを返す
print(c2.name) # エラーを返す

インスタンスc1に、インスタンス変数「name」が設定されました。この様にインスタンス変数はインスタンス作成後に指定できます。インスタンスc2にはインスタンス変数が設定されていないのでエラーとなります。インスタンスごとに設定できるんですね。

コンストラクター

しかしながら、インスタンス作成時に決まったインスタンス変数を設定しておきたいことがあります(というより、こちらの方かほとんどだと思います)。この様な場合、「コンストラクター」と呼ばれる機能を使います。コンストラクターインスタンス生成時に実行するスクリプトを設定できます。

コンストラクターを指定するには「initメソッド」を使用します。インスタンス生成後、初期化するために自動で呼び出される特殊な関数(特殊メソッド)です。以下のように記述します。

class クラス名:
    def __init__(self[, パラメーターの列挙]):
        #処理

「self」の記述は省略できません。パラメーターはインスタンス作成時に、引数の列挙として以下のように記述します。

クラス名(引数の列挙)

引数の列挙が、initメソッドのパラメーターの列挙に渡されます。

class ClassTest:
    def __init__(self , data):
        print('コンストラクター実行')
        self.name = data

c1 = ClassTest('Tom') #コンストラクター実行 と表示される

print(c1.name) # Tomを返す

引数の指定を使用略した場合の値を設定することもできます。

class ClassTest:
    def __init__(self , data = 'Bob'): # 省略された場合Bobが設定される。
        self.name = data

c1 = ClassTest('Tom')
c2 = ClassTest()

print(c1.name) # Tomを返す
print(c2.name) # Bobを返す

インスタンスメソッド

オブジェクトは「メソッド」と呼ばれる機能を持つ事ができてると、以前お話しました。メソッドはデータ型に紐付いた関数です。クラスはオブジェクトを作る仕組みですので、メソッドを作る機能があります。以下のように記述します。

class クラス名:
    def メソッド名(self[, パラメーターの列挙]):
        #処理

こちらも「self」の記述は省略できません。呼び出し時は以下のように記述します。

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

これを「インスタンスメソッド」と呼びます。以下のスクリプトを実行してみましょう。

class ClassTest:
    def __init__(self , data):
        self.name = data

    def greet(self):
        return f"Hello! I'm {self.name}."
   
c1 = ClassTest('Tom') 
print(c1.greet()) # Hello! I'm Tom. と返す。

メソッドgreetが実行されました。

次回もクラス

いかがでしようか。中身が少し充実してきましたね。次回もクラスです。今回はインスタンスごとに設定される変数、メソッドにつてご紹介しましたが、クラスに設定される変数、メソッドもあります。お楽しみに!!

hirocom777.hatenadiary.org

Python再学習のまとめはこちら!!