こんにちは!ぼりたそです!今回は以前ご紹介したクラスについてまとめた記事の続編となります。
この記事は以下のポイントでまとめています。
前回はクラスを定義してインスタンス化するところまで解説しましたが、今回は実際にメソッドを定義してよりクラスっぽくしていこうと思います。
まだ前回の記事を見ていない方は以下のリンクより閲覧ください!
コンストラクタ
コンストラクタとはクラス内の特殊なメソッドであり、クラスがオブジェクトとして生成されると必ず呼び出されるメソッドです。コンストラクタは以下のように記述することで定義されます。
__init__(self, 引数2, 引数3,・・・):
処理
第一引数にselfと記述しますが、これはインスタンス化した自分自身を呼び出すために必ず設定する引数になります。後ほど説明しますが、クラスのメソッドの第一引数にはselfを設定すると覚えておけば問題ありません。
実際にコンストラクタを定義したクラスを以下にご紹介します。
#コンストラクタを定義したクラス
class Self_Introduction:
def __init__(self):
print('初期化メソッドが実行されました')
sf = Self_Introduction()
#出力結果
#初期化メソッドが実行されました
sfとしてクラスをインスタンス化した際に初期化メソッドが実行されているのがわかるかと思います。
メソッドの定義
続いてはメソッドの定義です。メソッドは簡単に言えばクラス内で定義される関数です。以下のような記述により定義することができます。
def メソッド名(self, 引数2, 引数3,・・・):
処理
メソッドも第一引数にはselfを設定しています。
実際にメソッドを記述したクラスを記述してみました。
#クラスにメソッドを定義してインスタンス化
class Self_Introduction:
def __init__(self):
self.name = ''
def name_set(self,name):
self.name = name
print(f'初めまして!私の名前は{self.name}です。')
sf = Self_Introduction()
sf.name_set('ぼりたそ')
#出力結果
#初めまして!私の名前はぼりたそです。
上の例ではname_setというメソッドを定義しており、nameという引数に名前を設定すれば自己紹介文が出力されるメソッドになっています。
nameメソッドの処理にself.name=nameとしていますが、これはメソッド自身のnameという変数に引数として渡したnameを代入している処理になります。直感的にわかりにくいと思いますが、self.nameとnameは別物であると覚えておいて下さい。
クラスの継承
クラスは継承することができます。いきなり継承と言われても…ってなりますよね。クラスの継承とは元のクラスのメソッドを引き継いで新たにクラスを定義することを言います。継承するための記述は以下の通りです。
class クラス名(継承元クラス):
メソッド
試しに先ほど定義したSelf_Introductionのクラスを継承してみましょう。
#Self_Introductionのクラスを継承
class Self_Introduction:
def __init__(self):
self.name = ''
def name_set(self,name):
n = name
print(f'初めまして!私の名前は{n}です。')
class Greeting(Self_Introduction):
pass
g = Greeting()
g.name_set('ぼりたそ')
#出力結果
#初めまして!私の名前はぼりたそです。
Self_Introductionのクラスを継承させて新たにGreetingクラスを定義してみました。Greetingクラスは特にメソッドを記述していませんが、継承したSelf_Introductionのname_setメソッドを使用できていますね。
終わりに
以上がクラスの解説になります。初めて読んだ方は少し難しく感じたかもしれませんね。そんな時は一度自分でクラスを定義してみてどう定義すればいいのか、どう使えばいいのかなど考えてみると理解が深まると思います。開発規模が大きくなるとクラスは必須になりますので、いつかPythonを使って社内開発したいと思っている方には重要な概念になるので頑張って自分のものにしましょう!