Pythonのクラスメソッドの使い方

pythonを勉強していて、クラスメソッドとは?の疑問に答える記事になります。

クラスメソッドとは

クラスメソッドは、クラスに紐づくメソッドで、第一引数にクラスオブジェクトが渡されます。

クラスメソッドは@classmethodを付ける点以外はインスタンスメソッドと同様に定義できます。

ただし、第一引数がクラスオブジェクトですので、selfではなくclsとすることが一般的です。

ヒロヤン
それでは実際にコードを書いて理解をしてみます。

クラスメソッドを実際に使ったコード

コードの概要としては、問い合わせフォームで入力された数字(27行目)に対して対応する日本語を返すコードになります。

class InquiryStatus():
    Pending = 0
    Ignore = 1
    Completed = 2
    
    INQUIRY_STATUS_CHOICES = [
        (Pending, '未対応'),
        (Ignore, '無視する'),
        (Completed, '対応済み')
    ]
    
    @classmethod
    def status_as_str(cls, inquiry_status):
        if inquiry_status == cls.Pending:
            return cls.INQUIRY_STATUS_CHOICES[0][1]
        
        elif inquiry_status == cls.Ignore:
            return cls.INQUIRY_STATUS_CHOICES[1][1]
        
        elif inquiry_status == cls.Completed:
            return cls.INQUIRY_STATUS_CHOICES[2][1]
        
        else:
            raise RuntimeError('invalid')
            

inquiry_status = 1
inquiry_status_as_str = InquiryStatus.status_as_str(inquiry_status)
print(inquiry_status_as_str) # 無視する
print(InquiryStatus.Pending) # 0

27行目で、inquiry_statusの値を設定できるようになっていて、右辺に、0 or 1 or 2 or それ以外の数字を入れてみてください。

printで日本語が出力されるようになっています。

クラスメソッドのつまり

つまりクラスメソッドとは、インスタンス化しなくても呼び出せるメソッドのことです。

上記のコードだと、クラス名.メソッド名(InquiryStatus.Pending)名で呼び出すことが可能(例:30行目)で、クラスに紐づけられたメソッドであると考えると分かり易いでしょう。

そしてクラスメソッドは、メソッドの一番上に@classmethodと付けることで定義でき、クラスから直接自分自身が持つ値を呼び出すことが可能です。

スクールを利用して本格的に学ぶ

いかがでしたでしょうか?

今回10人中9人が挫折すると言われるプログラミングを、半年間もの間頑張れ、結果、今はPythonエンジニアとして働く事ができているのも、プログラミングスクールを利用して自ら目標を設定して講師の言う通りにひたすら打ち込んだまでです。

挫折率が高いプログラミングこそお金を払ってメンターを付けて、道を見失わないように環境を構築する必要があるのではないでしょうか。

結局一人だとどうしてもだらけてしまいます。

これはダイエットで自分一人では痩せられないけど、トレーナーを付けて否が応でもせざるを得ない環境を作ると一緒ですね。

ヒロヤンもプログラミング勉強開始直後はあれこれ悩みましたが、悩むよりも手っ取り早くスクールに登録した方が最短ルートで勉強できるのではないかと考えました。

無料カウンセリングで、あなたの悩みを相談してみてはいかがでしょうか?

テックキャンプで無料相談を受ける

上記リンク先から無料相談ができます。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です