目标,区分一下几个概念:
- 实例属性
- 类属性
- 实例方法
- 类方法
- 静态方法
先来看一下需求:
-
设计一个 Game 类
-
属性:
- 定义一个 类属性 top_score 记录游戏的 历史最高分
- 定义一个 实例属性 player_name 记录 当前游戏的玩家姓名
- 方法:
- 静态方法 show_help 显示游戏帮助信息
- 类方法 show_top_score 显示历史最高分
- 实例方法 start_game 开始当前玩家的游戏
- 主程序步骤
- 查看帮助信息
- 查看历史最高分
- 创建游戏对象,开始游戏
类图:
实现:
class Game(object):
top_score = 0 # 游戏最高分,类属性
@staticmethod
def show_help(): # 静态方法
print("帮助信息:让僵尸走进房间")
@classmethod
def show_top_score(cls): # 类方法
print("游戏最高分是 %d" % cls.top_score)
def __init__(self, player_name):
self.player_name = player_name # 实例属性
def start_game(self): # 实例方法
print("[%s] 开始游戏..." % self.player_name)
Game.top_score = 999 # 使用类名.修改历史最高分
测试:
# 1. 查看游戏帮助
Game.show_help()
# 2. 查看游戏最高分
Game.show_top_score()
# 3. 创建游戏对象,开始游戏
game = Game("小明")
game.start_game()
# 4. 游戏结束,查看游戏最高分
Game.show_top_score()
提问: 如果方法内部 即需要访问 实例属性,又需要访问 类属性,应该定义成什么方法?
应该定义 实例方法 因为,类只有一个,在 实例方法 内部可以使用 类名. 访问类属性
案例小结
- 实例方法 —— 方法内部需要访问 实例属性
实例方法内部可以使用 类名. 访问类属性 - 类 方 法 —— 方法内部 只 需要访问 类属性
- 静态方法 —— 方法内部,不需要访问 实例属性 和 类属性