__init__
爲 對象初始化
python
所以,一般也會把:工具
在程序執行時:spa
self.
結論設計
Python
中 一切皆對象:3d
class AAA:
定義的類屬於 類對象obj1 = AAA()
屬於 實例對象
Python
中,類 是一個特殊的對象 —— 類對象
code
示例需求對象
name
blog
class Tool(object): # 使用賦值語句,定義類屬性,記錄建立工具對象的總數 count = 0 def __init__(self, name): self.name = name # 針對類屬性作一個計數+1 Tool.count += 1 # 建立工具對象 tool1 = Tool("斧頭") tool2 = Tool("榔頭") tool3 = Tool("鐵鍬") # 知道使用 Tool 類到底建立了多少個對象? print("如今建立了 %d 個工具" % Tool.count)
Python
中 屬性的獲取 存在一個 向上查找機制
遊戲
注意內存
對象.類屬性 = 值
賦值語句,只會 給對象添加一個屬性,而不會影響到 類屬性的值class
關鍵字下方能夠定義 類屬性語法以下
@classmethod def 類方法名(cls): pass
@classmethod
來標識,告訴解釋器這是一個類方法cls
cls
就是 哪個類的引用self
相似cls
cls
參數cls.
訪問類的屬性cls.
調用其餘的類方法示例需求
name
show_tool_count
的類方法,輸出使用當前這個類,建立的對象個數

@classmethod def show_tool_count(cls): """顯示工具對象的總數""" print("工具對象的總數 %d" % cls.count)
在類方法內部,能夠直接使用
cls
訪問 類屬性 或者 調用類方法
在開發時,若是須要在 類 中封裝一個方法,這個方法:
這個時候,能夠把這個方法封裝成一個 靜態方法
語法以下
@staticmethod def 靜態方法名(): pass
@staticmethod
來標識,告訴解釋器這是一個靜態方法class Dog(object): # 狗對象計數 dog_count = 0 @staticmethod def run(): # 不須要訪問實例屬性也不須要訪問類屬性的方法 print("狗在跑...") def __init__(self, name): self.name = name
需求
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()