1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonのスタティックメソッドについて勉強してみた

Posted at

概要

Java, Python等のオブジェクト指向言語を扱っていると避けて通れないのがクラスという概念
今回はスタティックメソッドについてまとめていこうと思います

前回はクラスメソッドについてまとめてました↓
クラスメソッドについてまとめ

そもそもスタティックメソッドとは?

  • インスタンス化せずに呼び出しが可能
  • 継承後も動作を変更しない場合に使用する: 汎用的な機能に使用する

Pythonでは以下のように実装される

class Sample:
    word = "word"

    @staticmethod # デコレートする
    def say_word() -> None: # 第一引数には何も指定しない
        print(Sample.word)
        return
    
# スタティックメソッドの呼び出し
Sample.say_word()

スタティックメソッドとの違いは?

項目名 スタティックメソッド クラスメソッド
呼び出し方 クラス名.メソッド名 クラス名.メソッド名
第一引数 なし cls(クラス自身)
参照できるもの クラス変数 クラス変数

違いは第一引数ぐらいしかなさそうです
では、どのような使い分けができるをユースケースで確認したいと思います

使い分け

どの情報にアクセスするか/使用するかで分けた方が良さそう

import uuid

class Student:
    type: str = "生徒"
    
    def __init__(self, school_name: str, name: str):
        self.__school_name = school_name
        self.__name = name
        self.__id = uuid.uuid4()

    # インスタンス個数の情報にアクセスするためインスタンスメソッド
    def say_id(self):
        print(f'{self.__id}')
        return

    # サブクラスでも同様の処理なのでスタティックメソッド
    @staticmethod
    def say_height(height: int) -> None:
        print(f'私の身長は{height}です')
        return

    # クラス変数にアクセスするのでクラスメソッド
    @classmethod
    def say_class_type(cls) -> None:
        print(cls.type)
        return

if __name__ == '__main__':
    john = Student('hoge', 'John')
    tom = Student('huga', 'Tom')

    tom.say_id()
    john.say_id()

    tom.say_class_type()
    john.say_class_type()

    tom.say_height(168)
    john.say_height(199)

実行結果.PNG

参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?