<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      xcq-bj

      導(dǎo)航

       

      DAY-06課堂筆記


      面向?qū)ο缶幊探榻B


      面向?qū)ο蠛兔嫦蜻^(guò)程的基本概念

      ?向?qū)ο?oop) 是?種編程?法, 編程思想(即指導(dǎo)如何寫(xiě)代碼), 適?于 中?型項(xiàng)?
      ?向過(guò)程也是?種編程思想, 適?于?型項(xiàng)?
      
      
      ?向過(guò)程 和 ?向?qū)ο?都可以實(shí)現(xiàn)某個(gè)編程的?的.
      
      
      ?向過(guò)程 考慮的是 實(shí)現(xiàn)的細(xì)節(jié)
      ?向?qū)ο?考慮的是 結(jié)果(誰(shuí)能做這件事)
      

      面向?qū)ο蟮暮诵膬?nèi)容 類 和 對(duì)象

      類和對(duì)象的概念

      • 類:是對(duì)具有相同特征或者行為的事物的一個(gè)統(tǒng)稱, 是抽象的,不能直接使用
        • 指代多個(gè)事物---很多事物的統(tǒng)稱
        • 代碼中 類 是由關(guān)鍵字class定義的
      • 對(duì)象:是由類創(chuàng)建出來(lái)的一個(gè)具體存在的事物, 可以 直接使用
        • 指代一個(gè)事物
        • 代碼中 使用類去創(chuàng)建(實(shí)例化)
      蘋(píng)果 ----> 類
      紅蘋(píng)果 ----> 類
      ?明??的那個(gè)紅蘋(píng)果 ----> 對(duì)象
      狗 ----> 類
      ??狗 -----> 類
      李四家的那條 ??狗 -----> 對(duì)象
      

      類 :就是模具。擁有一定的整體特征。

      對(duì)象:符合模具的要求,有具體的實(shí)現(xiàn)。

      當(dāng)我們把一大堆擁有共同特征的對(duì)象的靜態(tài)特征(屬性)和動(dòng)態(tài)特征(行為)都抽離出來(lái)后,就可以定義出一個(gè)叫做“類”的東西。

      類的構(gòu)成
      想要設(shè)計(jì)一個(gè)類, 通常需要滿足以下三個(gè)要素:
      - 類名: 同類事物的名字, 命名要滿足大駝峰命名法
      - 屬性: 同類事物具備的特征
      - 方法: 同類事物具備的行為
      
      ?向?qū)ο蟠a的步驟
      1, 設(shè)計(jì)類 (找類的三要素)
      2, 定義類
      3, 創(chuàng)建對(duì)象(實(shí)例化對(duì)象)
      4, 由對(duì)象調(diào)?類中的?法
      
      類的設(shè)計(jì)
      類的設(shè)計(jì) 就是找三要素. 屬性和?法 可能會(huì)有很多,我們只需要
      找到關(guān)注的即可
      
      類名的提取:使?名詞提煉法 分析整個(gè)業(yè)務(wù)流程, 得出的名詞,
      通 常就是類名
      
      ?:對(duì)于需求中沒(méi)有提到的屬性和方法, 在設(shè)計(jì)類的時(shí)候不要添加進(jìn)來(lái)!
      

      類的設(shè)計(jì)-案例演練1

      需求:
      ? 小明 今年 18 歲,身高 1.75,每天早上 跑 完步,會(huì)去 吃 東西
      ? 小美 今年 17 歲,身高 1.65,小美不跑步,小美喜歡 吃 東西
      
      類名 :Person
      屬性 :name  , age  ,height
      方法 :run   , eat
      

      類的設(shè)計(jì)-練習(xí)1

      需求:
      ? 一只 黃顏色 的 狗狗 叫 大黃
      ? 看見(jiàn)生人 汪汪叫
      ? 看見(jiàn)家人 搖尾巴
      
      類名 :Dog
      屬性 :color  , name  
      方法 :汪汪叫(bark)  , 搖尾巴(shake)
      

      類的設(shè)計(jì)-案例演練2

      需求:
      ? 進(jìn)入某 Web 項(xiàng)目登錄頁(yè)面,輸入用戶名、密碼、驗(yàn)證碼之后,點(diǎn)擊登錄按鈕可以登錄系統(tǒng)
      
      類名 :LoginPage
      屬性 :username  , paasword ,code  ,登錄按鈕
      方法 :登錄方法
      

      類的設(shè)計(jì)-練習(xí)2

      需求:
      進(jìn)入某APP項(xiàng)目的下訂單頁(yè)面,輸入用戶收貨地址后,點(diǎn)擊提交訂單按鈕,可以實(shí)現(xiàn)下單操作
      
      類名 :Page
      屬性 :用戶收貨地址  , 提交訂單按鈕  
      方法 :下單方法
      

      面向?qū)ο蠡菊Z(yǔ)法


      定義類

      在Python 中定義類使?關(guān)鍵字 class
      
      # 類名: 遵循大駝峰命名法
      class 類名:
          # 方法: 定義方式與函數(shù)基本相同, 區(qū)別是方法的第一個(gè)參數(shù)必須為 self
          def 方法1(self, 參數(shù)列表):
              pass
          
          
          def 方法2(self, 參數(shù)列表):
              pass
      

      創(chuàng)建對(duì)象

      在代碼中, 對(duì)象是由類對(duì)象.
      類名() # 就是創(chuàng)建對(duì)象
      # ?般使?變量將創(chuàng)建的對(duì)象保存起來(lái)
      變量 = 類名() # ?般將這個(gè)變量 稱為是對(duì)象, 本質(zhì)-->變量中保存的是對(duì)象的引?地址
      

      案例一

      需求:小貓 愛(ài) 吃魚(yú),小貓 要 喝水
      
      類名 :Cat
      屬性 :/
      方法 :吃魚(yú)eat ; 喝水drink
      
      class Cat:
          def eat(self):
              """吃?的?法"""
              print("吃魚(yú)")
      
      
          def drink(self):
              """喝?的?法"""
              print("喝水")
      
              
      tom = Cat()
      tom.drink()
      tom.eat()
      

      self 參數(shù)

      1, 參函數(shù)的語(yǔ)法上來(lái)看, self 是形參, 名字可以任意的變量
      名, 只是我們習(xí)慣性叫 self
      2, 特殊點(diǎn): self 是?個(gè)普通的參數(shù), 按照函數(shù)的語(yǔ)法,在調(diào)?的時(shí)候,必須傳遞實(shí)參值, 原因, 是 Python 解釋器?動(dòng)的將 調(diào)?這個(gè)?法的對(duì)象作為參數(shù)傳遞給 self  所以 self 就是調(diào)?這個(gè)?法對(duì)象
      
      class Cat:
          def eat(self):  # self 是調(diào)?這個(gè)?法的對(duì)象
              """吃?的?法"""
              print(f'self:{id(self)}')
              print('?貓愛(ài)吃?...')
      
      # 創(chuàng)建對(duì)象
      tom = Cat()
      # 通過(guò)對(duì)象 調(diào)?類中的?法
      print(f"tom :{id(tom)}")
      tom.eat()  # tom 調(diào)? ,self 就是 Tom
      blue_cat = Cat()
      
      print(f'blue:{id(blue_cat)}')
      blue_cat.eat()  # blue_cat 調(diào)?, self 就是 blue_cat
      

      屬性

      屬性表示事物的特征.
      可以給對(duì)象添加屬性 或者獲取對(duì)象的屬性值.
      
      給對(duì)象添加屬性:
      對(duì)象.屬性名 = 屬性值 # 添加或者修改
      
      獲取對(duì)象的屬性值:
      對(duì)象.屬性名
      
      在?法中操作屬性(self 是對(duì)象):
      self.屬性名 = 屬性值
      self.屬性名
      
      class Cat:
          def eat(self):  # self 是調(diào)?這個(gè)?法的對(duì)象
              """吃?的?法"""
              print(f'self:{id(self)}')
              print(f'?貓{self.name}愛(ài)吃?...')
      
      
      # 創(chuàng)建對(duì)象
      tom = Cat()
      tom.name = '湯姆'   #------->在類的外面定義屬性
      print(tom.name)
      tom.eat()
      
      blue_cat = Cat()
      print(f'blue:{id(blue_cat)}')
      blue_cat.name = '藍(lán)貓'
      blue_cat.eat()
      
      練習(xí):
      Cat 添加屬性 姓名, 年齡
      eat ?法中打印輸出 ?貓 xx, xx 歲 愛(ài)吃?
      
      class Cat:
          def eat(self):  # self 是調(diào)?這個(gè)?法的對(duì)象
              """吃?的?法"""
              print(f'self:{id(self)}')
              print(f'?貓{self.name},{self.age}歲 愛(ài)吃?...')
      
      tom=Cat()
      tom.name="xx"
      tom.age="xx"
      tom.eat()
      

      在類的內(nèi)部定義屬性??

      魔法方法:

      在 python 中存在一類方法,以兩個(gè)下劃線開(kāi)頭,兩個(gè)下劃線結(jié)尾,在滿足某個(gè)條件的情況下,會(huì)自動(dòng)調(diào)用,這一類方法 稱為魔法方法
      
      學(xué)習(xí):
      1:什么情況下會(huì)自動(dòng)調(diào)用(自動(dòng)調(diào)用的時(shí)機(jī))
      2:應(yīng)用場(chǎng)景
      3:注意事項(xiàng)
      

      初始化方法:__init__

      1, 調(diào)?時(shí)機(jī)
       在創(chuàng)建對(duì)象之后,會(huì)?動(dòng)調(diào)?.
      2, 應(yīng)?場(chǎng)景
       初始化對(duì)象, 給對(duì)象添加屬性
      3, 注意事項(xiàng)
       - 不要寫(xiě)錯(cuò)
       - 如果 屬性是會(huì)變化的, 則可以將這個(gè)屬性的值作為參數(shù)傳遞, 在創(chuàng)建對(duì)象的時(shí)候,必須傳遞實(shí)參值
      
      class Cat:
          def __init__(self, name, age):
              '''添加屬性'''
              self.name = name
              self.age = age
      
          def eat(self):
              """吃?的?法"""
              print(f'self:{id(self)}')
              print(f'?貓{self.name},{self.age}歲 愛(ài)吃?...')
      
      
      tom=Cat("tom","18")  
      tom.eat()           #?貓tom,18歲 愛(ài)吃?...
      
      # init ?法 創(chuàng)建對(duì)象之后 會(huì)?動(dòng)調(diào)?
      # 1 會(huì) 2 不會(huì)
      # Cat   # 2 不是創(chuàng)建對(duì)象
      # Cat() # 1 因?yàn)槭莿?chuàng)建對(duì)象
      # tom = Cat # 2 不是創(chuàng)建對(duì)象, 即 tom 也是類
      #
      # blue = Cat() # 1 創(chuàng)建對(duì)象
      # b = blue # 2 不是創(chuàng)建對(duì)象, 只是引?的傳遞
      #
      # t = tom() # 1, tom 已經(jīng)是類, 類名() 就是創(chuàng)建對(duì)象
      

      __str__方法

      1:調(diào)?時(shí)機(jī)
        使? print(對(duì)象) 打印對(duì)象的時(shí)候, 會(huì)?動(dòng)調(diào)?
          1, 如果沒(méi)有定義 __str__ ?法, 默認(rèn)打印的是 對(duì)象的引?地址
          2, 如果定義 __str__ ?法,打印的是 ?法的返回值
      2:應(yīng)?場(chǎng)景
        使? print(對(duì)象) 打印輸出對(duì)象的屬性信息
      3:注意事項(xiàng)
        必須返回?個(gè) 字符串
      

      class Cat:
          def __init__(self, name, age):
              '''添加屬性'''
              self.name = name
              self.age = age
      
      
          def __str__(self):  # ?般不使? print,直接返回
              return f"姓名: {self.name}, 年齡: {self.age}"
      
      
      tom=Cat("tom","18")
      print(tom)
      

      dir()函數(shù)

      dir(對(duì)象變量)
      作用:可以查看對(duì)象內(nèi)的 所有屬性及方法
      注意:dir()函數(shù)不具備輸出功能, 需要和print()函數(shù)配合使用
      

      封裝

      封裝: 根據(jù)要求將屬性和?法 定義到類中(定義類)
      

      封裝案例一:小明愛(ài)跑步

      需求:
      ? 小明 體重 75.0 公斤
      ? 小明每次 跑步 會(huì)減肥 0.5 公斤
      ? 小明每次 吃東西 體重增加 1 公斤
      

      class Person:
          def __init__(self,name,weight):
              self.name=name
              self.weight=weight
      
          def __str__(self):
              return f"{self.name}現(xiàn)在的體重為{self.weight}kg"
      
      
          def run(self):
              self.weight=self.weight-0.5
              print(f"{self.name}跑步后體重為{self.weight}kg")
      
          def eat(self):
              self.weight=self.weight+1
              print(f"{self.name}吃東西后體重為{self.weight}kg")
      
      xm=Person("小明",85)
      print(xm)           #小明現(xiàn)在的體重為85kg
      xm.run()            #小明跑步后體重為84.5kg
      xm.eat()            #小明吃東西后體重為85.5kg
      

      同一個(gè)類 創(chuàng)建的 多個(gè)對(duì)象 之間,屬性 互不干擾!

      if __name__ == '__main__':
          xm=Person("小明",85)
          print(xm)
          xm.run()
          xm.eat()
      
          xiaomei = Person("小美", 45)
          xiaomei.run()
          xiaomei.run()
          xiaomei.eat()
          print(xiaomei)
      

      封裝案例二:登錄

      需求:
      ? 進(jìn)入某 Web 項(xiàng)目登錄頁(yè)面,輸入用戶名、密碼、驗(yàn)證碼之后登錄系統(tǒng)
      
      class Login:
      
          def __init__(self, username, password, code):
              self.username = username
              self.password = password
              self.code = code
              if code == "8888":
                  if username == "張三" and password == "123456":
                      print("登錄成功!")
                  else:
                      print("賬號(hào)或密碼錯(cuò)誤!")
              else:
                  print("驗(yàn)證碼錯(cuò)誤!")
      
      
      if __name__ == '__main__':
          zq = Login("張三", "123456", "8888")
          mm = Login("張三", "123476", "8888")
          yzm = Login("張三", "123456", "8877")
          yhm = Login("王五", "123456", "8888")
      
      class LoginPage:
      
          def __init__(self, username, password, code):
              self.username = username
              self.password = password
              self.code = code
      
          def Login(self):
              print(f"1.輸入用戶名:{self.username}")
              print(f"2.輸入密碼:{self.password}")
              print(f"3.輸入驗(yàn)證碼:{self.code}")
              print(f"4.點(diǎn)擊登錄")
              if self.code == "8888":
                  if self.username == "張三" and self.password == "123456":
                      print("登錄成功!")
                  else:
                      print("賬號(hào)或密碼錯(cuò)誤!")
              else:
                  print("驗(yàn)證碼錯(cuò)誤!")
      
      
      if __name__ == '__main__':
          admin = LoginPage("張三", "123456", "8888")
          admin.Login()
          hm = LoginPage("XX", "123456", "8888")
          hm.Login()
          mm = LoginPage("張三", "XXXXX", "8888")
          mm.Login()
          yzm = LoginPage("張三", "123456", "XXXX")
          yzm.Login()
      

      封裝案例三:擺放家具

      需求:
      1. 房子(House) 有 戶型、總面積 和 家具名稱列表
      – 新房子沒(méi)有任何的家具
      2. 家具(HouseItem) 有 名字 和 占地面積,其中
      – 席夢(mèng)思(bed) 占地 4 平米
      – 衣柜(chest) 占地 2 平米
      – 餐桌(table) 占地 1.5 平米
      3. 將以上三件 家具 添加 到 房子 中
      4. 打印房子時(shí),要求輸出:戶型、總面積、剩余面積、家具名稱列表
      
      class HouseItem:
          def __init__(self, name, area):
              self.name = name
              self.area = area
      
          def __str__(self):
              return f"{self.name} 占地 {self.area}平方"
      
      
      if __name__ == '__main__':
          bed = HouseItem('席夢(mèng)思', 4)
          chest = HouseItem('?柜', 2)
          table = HouseItem('餐桌', 1.5)
          print(bed)
          print(chest)
          print(table)
      
      class House:
          def __init__(self, house_type, area):
              self.house_type = house_type
              self.area = area
              self.free_area=area
              self.item_name_list=[]
      
          def __str__(self):
              return f"戶型:{self.house_type}、面積:{self.area}、剩余面積{self.free_area}、家具名稱列表{self.item_name_list}"
      
          def add_item(self,item):
              if self.free_area > item.area:
                  print(f'添加家具: {item.name}')
                  self.item_name_list.append(item.name)
                  # 修改剩余?積
                  self.free_area -= item.area
              else:
                  print(f"房?剩余?積不?,換個(gè)?房? 吧.....")
                  
                  
            # 創(chuàng)建房?
          house = House('三室?廳', 100)
          print(house)
          house.add_item(bed)
          print(house)
          house.add_item(chest)
          print(house)
          house.add_item(table)
          print(house)
      

      繼承

      1, 繼承描述的是類與類之間的關(guān)系 is ... a
      2, 繼承的好處: 減少代碼冗余,重復(fù)代碼不需要多次書(shū)寫(xiě), 提高編程效率
      

      語(yǔ)法:

      # class 類A(object):
      # class 類A():
      class 類A: # 默認(rèn)繼承 object 類, object 類 Python 中最原始的類
      	pass
      
      
      class 類B(類A): # 就是繼承, 類 B 繼承 類 A
      	pass
      # 類 A: 父類 或 基類
      # 類 B: 子類 或 派生類
      
      子類繼承父類之后, 子類對(duì)象可以直接使用父類中的屬性和方法
      

      繼承的傳遞性

      說(shuō)明: 
      ? C 類從 B 類繼承, B 類又從 A 類繼承
      ? 那么 C 類就擁有 B 類和 A 類的所有屬性和方法
      
      結(jié)論: 子類擁有父類以及父類的父類中封裝的所有屬性和方法
      
      對(duì)象調(diào)用方法的順序: 對(duì)象.方法名()
      1, 會(huì)現(xiàn)在自己的類中查找, 找到直接使用
      2, 沒(méi)有找到 去父類中查找, 找到直接使用
      3, 沒(méi)有找到, 在父類的父類中查找, 找到直接使用
      4, 沒(méi)有找到, ...
      5, 直到 object 類, 找到直接使用, 沒(méi)有找到,報(bào)錯(cuò)
      

      繼承案例

      需求:
      1. 定義動(dòng)物類,動(dòng)物有姓名和年齡屬性,具有吃和睡的行為
      2. 定義貓類,貓類具有動(dòng)物類的所有屬性和方法,并且具有抓老鼠的特殊行為
      3. 定義狗類,狗類具有動(dòng)物類的所有屬性和方法,并且具有看門(mén)的特殊行為
      4. 定義哮天犬類,哮天犬類具有狗類的所有屬性和方法,并且具有飛的特殊行為
      
      class Animal:
          def __init__(self, name, age):
              self.name = name
              self.age = age
      
          def eat(self):
              print(f"{self.name}吃吃吃")
      
          def sleep(self):
              print(f"{self.name}睡睡睡")
      
      
      class Cat(Animal):
      
          def catch(self):
              print(f"{self.name}抓老鼠")
      
      
      class Dog(Animal):
      
          def door(self):
              print(f"{self.name}看門(mén)")
      
      
      class xtq(Dog):
      
          def fly(self):
              print(f"{self.name}起飛")
      
      
      if __name__ == '__main__':
          tom = Cat("湯姆", 2)
          tom.eat()
          tom.sleep()
          tom.catch()
          dh = Dog("大黃", 3)
          dh.eat()
          dh.sleep()
          dh.door()
          xtq = xtq("神犬", 100)
          xtq.eat()
          xtq.sleep()
          xtq.door()
          xtq.fly()
      
      

      方法的重寫(xiě)(override)

      1, 什么是重寫(xiě)?
      重寫(xiě)是在子類中定義了和父類中名字一樣的方法.
      2, 重寫(xiě)的原因? 為什么重寫(xiě)?
      父類中的代碼不能滿足子類對(duì)象的需要
      3, 重寫(xiě)的方式
      3.1 覆蓋式重寫(xiě)
      3.2 擴(kuò)展式重寫(xiě)
      

      覆蓋式重寫(xiě)

      父類中的功能全部不要.
      直接在子類中定義和父類中方法名字一樣的方法接口, 直接書(shū)寫(xiě)新的代碼.
      
      class Dog:
          def bark(self):
              print('汪汪汪叫......')
      
      
      class XTQ(Dog): # 需要哮天犬 嗷嗷嗷叫, 父類中的 bark 方法,不能滿足子類對(duì)象的需要, 覆蓋式重寫(xiě)
          def bark(self):
              print('嗷嗷嗷叫.....')
          pass
      
      
      if __name__ == '__main__':
          xtq = XTQ()
          xtq.bark()
      

      擴(kuò)展式重寫(xiě)

      父類中的功能還需要,只是添加了新的功能
      方法:
      1. 先在子類中定義和父類中名字相同的方法
      2. 在子類的代碼中 使用 super().方法名() 調(diào)用父類中的功能
      3. 書(shū)寫(xiě)新的功能
      
      class Dog:
          def bark(self):
              print('汪汪汪叫......')
      
      
      class XTQ(Dog): # 需要哮天犬 嗷嗷嗷叫, 父類中的 bark 方法,不能滿足子類對(duì)象的需要, 覆蓋式重寫(xiě)
          def bark(self):
              super().bark()
              print('嗷嗷嗷叫.....')
          pass
      
      
      if __name__ == '__main__':
          xtq = XTQ()
          xtq.bark()
      

      多態(tài)

      多態(tài): 調(diào)用代碼的技巧
                         ---就是通過(guò)定義方法,重寫(xiě)方法,造成多個(gè)狀態(tài),引用不同狀態(tài)得到不同結(jié)果
      多態(tài):不同的子類對(duì)象調(diào)用相同的父類方法,產(chǎn)生不同的執(zhí)行結(jié)果
      
      多態(tài)案例:
      需求:
      1. 在 Dog 類中封裝方法 game
      – 普通狗只是簡(jiǎn)單的玩耍
      2. 定義 XiaoTianDog 繼承自 Dog,并且重寫(xiě) game 方法
      – 哮天犬需要在天上玩耍
      3. 定義 Person 類,并且封裝一個(gè) 和狗玩 的方法
      – 在方法內(nèi)部,直接讓 狗對(duì)象 調(diào)用 game 方法
      
      class Dog:
          def game(self):
              print('普通狗簡(jiǎn)單的玩耍...')
      
      
      class XTQ(Dog):
          def game(self):
              print('哮天犬在天上玩耍...')
      
      
      class Person:
          def play_with_dog(self, dog):
              """dog 是狗類或者其子類的對(duì)象"""
              print('人和狗在玩耍...', end='')
              dog.game()
          
      
      if __name__ == '__main__':
          dog1 = Dog()
          xtq = XTQ()
          xw = Person()
          xw.play_with_dog(dog1)
          xw.play_with_dog(xtq)
      

      DAY-07課堂筆記


      面向?qū)ο笃渌Z(yǔ)法


      私有和公有

      在Python 中,定義類的時(shí)候, 可以給 屬性和方法設(shè)置 訪問(wèn)權(quán)限, 即規(guī)定在什么地方可以使用.
      權(quán)限一般分為兩種: 公有權(quán)限 私有權(quán)限
      

      公有權(quán)限

      • 定義
      直接定義的屬性和方法就是公有的
      
      • 特點(diǎn)
      可以在任何地方訪問(wèn)和使用,只要有對(duì)象就可以訪問(wèn)和使用
      

      私有權(quán)限

      • 定義
      1,只能在類內(nèi)部定義(class關(guān)鍵字的縮進(jìn)中)
      
      2,只需要在屬性名 或者方法名掐滅加兩個(gè)下劃線,這個(gè)方法或者屬性就變?yōu)樗接械?
      • 特點(diǎn)
      私有 只能在當(dāng)前類的內(nèi)部使用. 不能在類外部和子類直接使用
      
      
      • 應(yīng)用場(chǎng)景
      一般來(lái)說(shuō),定義的屬性和方法 都為公有的.
      某個(gè)屬性 不想在外部直接使用, 定義為私有
      某個(gè)方法,是內(nèi)部的方法(不想在外部使用), 定義為私有
      
      """定義人類, name 屬性 age 屬性(私有)"""
      class Person:
          
          
      	def __init__(self, name, age):
              self.name = name # 公有
              self.__age = age # 公有-->私有, 在屬性名前加上兩個(gè)下劃線
              
              
      	def __str__(self): # 公有方法
      		return f"{self.name}, {self.__age}"
          
          
      	def set_age(self, age): # 定義公有方法,修改私有屬性
              if age < 0 or age > 120:
                  print('提供的年齡信息不對(duì)')
                  return
              self.__age = age
          
          
      if __name__ == '__main__':
          xw = Person('小王', 18)
          print(xw)
          xw.__age = 10000 # 添加一個(gè)公有屬性 __age
          print(xw)
          xw.set_age(10000)
          print(xw)
      
      

      對(duì)象 屬性 方法

      對(duì)象分類

      python 中一切皆對(duì)象
      

      類對(duì)象

      類對(duì)象 就是 類, 就是使用 class 定義的類
      在代碼執(zhí)行的時(shí)候, 解釋期會(huì)自動(dòng)的創(chuàng)建.
      作用:
      1, 使用類對(duì)象創(chuàng)建 實(shí)例對(duì)象
      2, 存儲(chǔ)一些類的特征值(類屬性)
      

      實(shí)例對(duì)象

      1, 創(chuàng)建對(duì)象也稱為實(shí)例化, 所以 由類對(duì)象(類) 創(chuàng)建的對(duì)象 稱為是 實(shí)例對(duì)象, 簡(jiǎn)稱實(shí)例
      2, 一般來(lái)說(shuō),沒(méi)有特殊強(qiáng)調(diào),我們所說(shuō)的對(duì)象 都是指 實(shí)例對(duì)象(實(shí)例)
      3, 實(shí)例對(duì)象 可以保存實(shí)例的特征值 (實(shí)例屬性)
      4, 就是使用 類名() 創(chuàng)建的對(duì)象
      

      屬性的劃分

      使用 實(shí)例對(duì)象.屬性 訪問(wèn) 屬性的時(shí)候, 會(huì)先在 實(shí)例屬性中查找,如果找不到,去類屬性中查找, 找到就使用, 找不到,就報(bào)錯(cuò)
      
      即: 每個(gè)實(shí)例對(duì)象 都有可能訪問(wèn)類屬性值(前提,實(shí)例屬性和類屬性不重名)
      

      實(shí)例屬性

      • 概念

        是每個(gè)實(shí)例對(duì)象 具有的特征(屬性), 每個(gè)實(shí)例對(duì)象的特征
        
      • 定義

        一般都是在 init 方法中,使用 self.屬性名 = 屬性值 來(lái)定義
        
      • 特征(內(nèi)存)

        每個(gè)實(shí)例對(duì)象 都會(huì)保存自己的 實(shí)例屬性, 即內(nèi)存中存在多份
        
      • 訪問(wèn)和修改

        # 可以認(rèn)為是通過(guò) self
        實(shí)例對(duì)象.屬性 = 屬性值 # 修改
        實(shí)例對(duì)象.屬性 # 訪問(wèn)
        

      類屬性

      • 概念

        是類對(duì)象具有的 特征, 是整個(gè)類的特征
        
      • 定義

        一般 在類的內(nèi)部(class 縮進(jìn)中), 方法的外部(def 的縮進(jìn)外部) 定義的變量
        
      • 特征(內(nèi)存)

        只有類對(duì)象保存一份, 即在內(nèi)存中只有一個(gè)
        
      • 訪問(wèn)和修改

        # 即通過(guò)類名
        類對(duì)象.屬性 = 屬性值
        類對(duì)象.屬性
        

      什么時(shí)候 定義類屬性?

      代碼中 使用的屬性 基本上 都是 實(shí)例屬性,即都通過(guò) self 定義.

      當(dāng) 某個(gè)屬性值描述的信息是整個(gè)類的特征(這個(gè)值變動(dòng),所有的這個(gè)類的對(duì)象這個(gè)特征都會(huì)發(fā)生變化)

      案例

      1. 定義一個(gè) 工具類
      2. 每件工具都有自己的 name
      3. 需求 —— 知道使用這個(gè)類,創(chuàng)建了多少個(gè)工具對(duì)象?
      
      類名: Tool
      屬性: name(實(shí)例屬性) count(類屬性)
      方法: init 方法
      
      class Tool:
          # 定義類屬性 count,記錄創(chuàng)建對(duì)象的個(gè)數(shù)
          count = 0
      
          def __init__(self, name):
              self.name = name  # 實(shí)例屬性, 工具的名字
              # 修改類屬性的值
              Tool.count += 1
      
      
      if __name__ == '__main__':
          # 查看 創(chuàng)建對(duì)象的個(gè)數(shù)
          print(Tool.count)  # 查看類屬性
          tool1 = Tool('錘子')
          print(Tool.count)
          tool2 = Tool('扳手')
          print(Tool.count)
          print(tool2.count) # 先找實(shí)例屬性 count, 找不到, 找類屬性 count, 找到,使用
      

      方法的劃分

      實(shí)例方法

      • 定義時(shí)機(jī)

        如果方法中 需要使用 實(shí)例屬性, 則這個(gè)方法 **必須** 定義為實(shí)例方法
        
      • 定義

        # 直接定義的方法就是實(shí)例方法
        class 類名:
        	def 方法名(self):
        		pass
        
      • 參數(shù)

        參數(shù)一般寫(xiě)作 self, 表示的是 實(shí)例對(duì)象
        
      • 調(diào)用

        實(shí)例對(duì)象.方法名()
        

      類方法

      • 定義時(shí)機(jī)

        如果 方法中 不需要使用 實(shí)例屬性, 但需要使用 類屬性, 則這個(gè)方法 **可以** 定義為 類方法(建議)
        
      • 定義

        # 定義類方法,需要在方法名上方 書(shū)寫(xiě) @classmethod , 即使用 @classmethod 裝飾器裝飾
        class 類名:
            @classmethod
            def 方法名(cls):
            	pass
        
      • 參數(shù)

        參數(shù) 一般寫(xiě)作 cls, 表示類對(duì)象, 即 類名, 同樣不需要手動(dòng)傳遞,Python 解釋器會(huì)自動(dòng)傳遞
        
      • 調(diào)用

        # 方法一
        類名.方法名()
        # 方法二
        實(shí)例對(duì)象.方法名()
        

      ? 靜態(tài)方法

      • 定義時(shí)機(jī)

        方法中即不需要使用 實(shí)例屬性, 也不需要使用 類屬性, **可以** 將這個(gè)方法定義為 靜態(tài)方法
        
      • 定義

        # 定義靜態(tài)方法, 需要使用 裝飾器 @staticmethod 裝飾方法
        class 類名:
            @staticmethod
            def 方法名():
            	pass
        
      • 參數(shù)

        靜態(tài)方法,對(duì)參數(shù)沒(méi)有要求, 一般沒(méi)有
        
      • 調(diào)用

        # 方法一
        類名.方法名()
        # 方法二
        實(shí)例對(duì)象.方法名()
        

      案例

      需求:
      1. 設(shè)計(jì)一個(gè) Game 類
      2. 屬性:
          ? 定義一個(gè) top_score 類屬性 -> 記錄游戲的歷史最高分
          ? 定義一個(gè) player_name 實(shí)例屬性 -> 記錄當(dāng)前游戲的玩家姓名
      3. 方法:
          ? 靜態(tài)方法 show_help() -> 顯示游戲幫助信息
          ? 類方法 show_top_score() -> 顯示歷史最高分
          ? 實(shí)例方法 start_game() -> 開(kāi)始當(dāng)前玩家的游戲
              - ① 使用隨機(jī)數(shù) 生成 10-100 之間數(shù)字 作為本次游戲的得分
              - ② 打印本次游戲等分 : 玩家 xxx 本次游戲得分 ooo
              - ② 和歷史最高分進(jìn)行比較, 如果比歷史最高分高, 修改歷史最高分
      4. 主程序步驟: main
      1 查看幫助信息
      2 查看歷史最高分
      3 創(chuàng)建游戲?qū)ο螅_(kāi)始游戲
      4 再一次游戲
      
      import random
      
      
      class Game:
          top_score = 0
      
          def __init__(self, player_name):
              self.player_name = player_name
      
          @staticmethod
          def show_help():
              print("幫助你一下")
      
          @classmethod
          def show_top_score(cls):
              print(f"最高分{Game.top_score}")
      
          def start_game(self):
              print("開(kāi)始游戲")
              max2 = random.randint(10, 100)
              print(f"{self.player_name}本場(chǎng)得分{max2}")
              if max2 > Game.top_score:
                  Game.top_score = max2
      
      
      if __name__ == '__main__':
          Game.show_help()
          Game.show_top_score()
          xm = Game("小明")
          xm.start_game()
          Game.show_top_score()
          xh = Game("小h")
          xh.start_game()
          Game.show_top_score()
      
      上面代碼每次執(zhí)行,top_score 都會(huì)重新賦值為0。為解決數(shù)據(jù)一直保存,引入 文件
      (下一篇筆記)
      
      posted on 2024-07-17 21:30  xcq_cm  閱讀(90)  評(píng)論(0)    收藏  舉報(bào)
       
      主站蜘蛛池模板: 无码三级av电影在线观看| 新兴县| 精品午夜福利在线视在亚洲| 日韩无矿砖一线二线卡乱| 国产普通话对白刺激| 亚洲avav天堂av在线网爱情| 综合在线 亚洲 成人 欧美| 成人白浆一区二区三区在线观看| 亚洲一区在线成人av| 久久亚洲精品成人综合网| 国产精品亚洲二区在线播放| 女人被狂躁到高潮视频免费软件| 国产精品女人毛片在线看| 国产性一交一乱一伦一色一情| 欧美性色黄大片| 日本一区二区不卡精品| 久久久久久综合网天天| 久久精品国产2020| 老男人久久青草av高清| 国产av一区二区不卡| 性色av 一区二区三区| 久久精品国产99精品亚洲| 夜鲁鲁鲁夜夜综合视频| 新巴尔虎左旗| 老司机性色福利精品视频| 亚洲AV成人无码精品电影在线 | 国产精品偷伦费观看一次| 狠狠躁夜夜躁人人爽天天天天| 亚洲人妻系列中文字幕| 女人与牲口性恔配视频免费| 无码伊人久久大杳蕉中文无码| 777奇米四色成人影视色区| 日韩精品一区二区三区色| 国产亚洲一二三区精品| 亚洲av产在线精品亚洲第一站| 国产自产视频一区二区三区| 成人特黄特色毛片免费看| 久久午夜私人影院| 久久涩综合一区二区三区| 99精品国产一区二区三区2021| 九九热免费在线观看视频|