目標,區分一下幾個概念:
- 實例屬性
- 類屬性
- 實例方法
- 類方法
- 靜態方法
先來看一下需求:
-
設計一個 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()
提問: 如果方法內部 即需要訪問 實例屬性,又需要訪問 類屬性,應該定義成什么方法?
應該定義 實例方法 因為,類只有一個,在 實例方法 內部可以使用 類名. 訪問類屬性
案例小結
- 實例方法 —— 方法內部需要訪問 實例屬性
實例方法內部可以使用 類名. 訪問類屬性 - 類 方 法 —— 方法內部 只 需要訪問 類屬性
- 靜態方法 —— 方法內部,不需要訪問 實例屬性 和 類屬性