Python-面向对象编程-方法综合案例

142 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

1. 案例分析

需求:设计一个Game类。其属性需求如下所示:

属性:

  • 定义一个类属性top_score记录游戏的历史最高分
  • 定义一个实例属性play_name记录当前游戏的玩家姓名

方法:

  • 静态方法show_help显示游戏帮助信息
  • 类方法show_top_score显示历史最高分
  • 实例方法start_game开始当前玩家的游戏

主程序步骤

  1. 查看帮助信息
  2. 查看历史最高分
  3. 创建游戏对象,开始游戏

2. 案例演练

案例程序代码如下所示:

  • 定义类属性top_score,记录历史最高分,只需要在class下方使用赋值语句就可以
  • show_help方法没有参数,既不需要访问类属性,也不需要访问实例属性,因此将该方法定义成@staticmethod静态方法
  • 定义类方法,应该使用@classmethod修饰符,修饰sow_top_score
  • 在类方法内部输出类属性,应该使用参数cls就可以,cls.top_score
  • 实例方法start_game
class Game(object):
    # 历史最高分
    top_score = 0

    def __init__(self, player_name):
        self.player_name = player_name

    @staticmethod
    def show_help():
        print("帮助信息,让僵尸进入大门")

    @classmethod
    def show_top_score(cls):
        print("历史记录%d" % cls.top_score)

    def start_game(self):
        print("%s 开始游戏啦..." % self.player_name)


# 1. 查看游戏的帮助信息
Game.show_help()
# 2. 查看历史最高分
Game.show_top_score()
# 3. 创建游戏对象
game = Game("小明")
game.start_game()

3. 案例结果

程序运行结果如下图所示:

  • 对象的实例方法在调用时,应该先创建一个对象,然后让对象的实例再调用定义的实例方法
  • 静态方法/类方法,在调用的时候都是使用类名.的方式调用

image.png

4. 案例小结

  1. 实例方法--方法内部需要访问实例属性:实例方法内部可以使用类名.访问类属性
  2. 类方法--方法内部只需要访问类属性
  3. 静态方法--方法内部,不需要访问实例属性和类属性 如果方法内部既需要访问实例属性,又需要访问类属性,应该定义实例方法:因为类只有一个,在实例方法内部可以使用类名.访问类属性