(08)-Python3之--類和對象


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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM