🐈

Python100本ノック#10 クラスメソッド(classmethod)とスタティックメソッド(staticmethod)の利用例

2023/12/01に公開

クラスメソッド(classmethod)とスタティックメソッド(staticmethod)の利用例

設計

Gameクラス:
属性1:ゲーム内のトップスコア
属性2:プレイヤーの名前

メソッド1:トップスコア表示
メソッド2:ヘルプ情報表示
メソッド3:ゲームスタート

分析:
属性1はゲーム内の共通属性であるため、クラス属性``にすべき。 属性2はプレイヤーごとの属性になるため、インスタンス属性にすべき。 メソッド1:属性1を呼び出すためのものであり、classmethodにすべき。 メソッド2:インスタンス変数やクラス変数にアクセスする必要がない、独立したメソッドのため、staticmethodにしてよさそう。 メソッド3:プレイヤーごとのゲームを始めるための機能だから、インスタンスメソッド```にすべき。

実装

class Game(object):
    # 1、top_score
    # 属性1:ゲーム内のトップスコア
    top_score = 0

    # 2、__init__で初期化
    # 属性2:プレイヤーの名前
    def __init__(self, player_name):
        self.player_name = player_name

    # 3、メソッド1:トップスコア表示 を定義
    @classmethod
    def show_top_score(cls):
        print(f'ゲーム内のトップスコア:{cls.top_score}')

    # 4、メソッド2:ヘルプ情報表示 を定義
    @staticmethod
    def show_help():
        print('ヘルプ情報')

    # 5、start_game() を定義
    def start_game(self):
        print(f'{self.player_name},Game Start')

# インスタンス化
mario = Game('Mario')
mario.start_game()

# トップスコア表示
Game.show_top_score()

# ヘルプ情報表示
Game.show_help()

luigi = Game('Luigi')
luigi.start_game()

output

Mario,Game Start
ゲーム内のトップスコア:0
ヘルプ情報
Luigi,Game Start

Discussion