持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情
1. 案例分析
需求:设计一个Game类。其属性需求如下所示:
属性:
- 定义一个类属性top_score记录游戏的历史最高分
- 定义一个实例属性play_name记录当前游戏的玩家姓名
方法:
- 静态方法show_help显示游戏帮助信息
- 类方法show_top_score显示历史最高分
- 实例方法start_game开始当前玩家的游戏
主程序步骤
- 查看帮助信息
- 查看历史最高分
- 创建游戏对象,开始游戏
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. 案例结果
程序运行结果如下图所示:
- 对象的实例方法在调用时,应该先创建一个对象,然后让对象的实例再调用定义的实例方法
- 静态方法/类方法,在调用的时候都是使用
类名.的方式调用
4. 案例小结
- 实例方法--方法内部需要访问实例属性:实例方法内部可以使用
类名.访问类属性 - 类方法--方法内部只需要访问类属性
- 静态方法--方法内部,不需要访问实例属性和类属性
如果方法内部既需要访问实例属性,又需要访问类属性,应该定义实例方法:因为类只有一个,在实例方法内部可以使用
类名.访问类属性