1.定義
類:類是抽象的,一類事物的共性的體現。 有共性的屬性和行為。
對象:具體化,實例化。有具體的屬性值,有具體做的行為。
一個類 對應N多個對象。
類包含屬性以及方法。
class 類名: 屬性 方法
定義一個類:
class Preson: def eat(self): print("正在吃飯"); def sleep(self): print("正在睡覺")
2.類
2.1命名
類名:符合標識符的規定但是一般是每個單詞的首字母大寫。(駝峰命名)
2.2創建對象
屬性寫在類外的情況,就是通過對象.屬性,對象.方法()的方法調用
對象的三要素:屬性(對象是什么)、方法(對象能做什么)、事件(對象如何響應)
相互關系:類是對象的抽象,對象是類的實例,類是一種抽象事物的分類,對象是一種實例
2.3屬性
概念:用於訪問類字段的成員;
屬性用途:保證數據的安全,作數據的驗證;
例如:學生有哪些屬性(昵稱、學號、性別、年齡、班級、聯系方式、城市)
對象屬性的兩種創建方式:
# self對象的載體 def __int__(self, name, age): # 創建對象屬性 self.name = name self, age = age
2.4初始化方法
在創建類的實例的時候,會自動調用這個方法,一般是用戶對實例屬性初始化
class Person: def __init__(self, name, age): self.name = name self.age = age print("實例化類時,init方法就被調用了") p = Person("tom", 22) print(p.name) print(p.age) 結果: 實例化類時,init方法就被調用了 tom 22
2.5 Python中私有化特性
為了讓外部無法訪問屬性或方法,只要在名字前面加上雙下划線即可
對屬性進行私有化 :__屬性
對方法進行私有化:__方法()
class Secret: __name = 'yoda' # 加上雙下划線私有化屬性 def get_name(self): return self.__name def __secret(self): # 私有化方法 print("can't find")
3.類的語法
語法:
class 類名: # 屬性 - 變量 # 行為 - 函數 def 行為1(self): # self是我 self是指的實例化對象本身。定義的時候不知道對象到底是誰,用self self.屬性 self.行為N # 初始化 - 在實例化的同時,執行初始化工作。沒有return的用法。 def __init__(self,[參數1,參數2.。]) ### 初始化工作 ### # 具體化實例化 實例名 = 類名([參數1,參數2.。。]) # 通過實例名稱來訪問實例的屬性、做行為 實例名.屬性 實例名.行為
實戰例子:
""" 需求: 人和機器猜拳游戲寫成一個類,有如下幾個函數: 1)函數1:選擇角色1 曹操 2張飛 3 劉備 2)函數2:角色猜拳1剪刀 2石頭 3布 玩家輸入一個1-3的數字 3)函數3:電腦出拳 隨機產生1個1-3的數字,提示電腦出拳結果 4)函數4:角色和機器出拳對戰,對戰結束后,最后出示本局對戰結果...贏...輸。 5)函數5:顯示整個游戲過程中,角色贏幾局 電腦贏幾局,平局幾次。 一次猜拳結束后,要提示用戶是否繼續?按y繼續,按n退出。 最后結束的時候輸出結果 角色贏幾局 電腦贏幾局,平局幾次 游戲結束 """ import random class GussesGame: datas = {"1": "剪刀", "2": "石頭", "3": "布"} def __init__(self): self.user_game_result = [0, 0, 0] # win,lose,tie # 選擇角色 def select_role(self, role_index): roles = {"1": "曹操", "2": "張飛", "3": "劉備"} if str(role_index) in roles.keys(): print("您選擇的角色為{}".format(roles[str(role_index)])) # 角色出拳 def _role_finger_punch(self): number = input("請出拳(1剪刀 2石頭 3布),出數字即可:") if number.isdigit() and number in self.datas.keys(): print("角色出拳為:{}".format(self.datas[str(number)])) return int(number) else: print("角色出拳錯誤!!角色可出拳僅限為 1剪刀 2石頭 3布") # 電腦出拳 def _computer_finger_punch(self): number = random.randint(1, 3) if str(number) in self.datas.keys(): print("電腦出拳為:{}".format(self.datas[str(number)])) return number # 人機對戰 def battle(self): # 用戶出拳 role_number = self._role_finger_punch() # 電腦出拳 computer_number = self._computer_finger_punch() # PK if computer_number is not None and role_number is not None: if (role_number, computer_number) in [(1, 3), (2, 1), (3, 2)]: print("恭喜,你贏了!一統江湖!") self.user_game_result[0] += 1 elif role_number == computer_number: print("平局!實力不相上下!") self.user_game_result[2] += 1 else: print("噢嗬!你敗了!手下敗將,敢不敢再來一局!") self.user_game_result[1] += 1 else: print("人機猜拳失敗!!原因是某一方出拳不符合要求!") # 是否繼續玩 is_go_on = input("還沒盡興?是否繼續?按y繼續,按n退出。") if is_go_on == "y": return True else: return False # 戰果顯示 def show_user_game_result(self): print("角色在本輪游戲當中的戰果為:{}勝{}敗{}平局".format(*self.user_game_result)) if __name__ == "__main__": # 游戲 開始 one = GussesGame() # 選角 one.select_role(1) while True: # 人機battle is_go_on = one.battle() # 繼續battle嗎 if is_go_on is False: print("不玩了,拜拜!!") break # battle的最終結果 one.show_user_game_result()
