python 類屬性、靜態方法與類方法


1. 類屬性

  • 1.1 定義

    • 在類中方法外通過屬性名 = 屬性值定義的屬性
    • 訪問方式:
      • 類名.屬性名
      • 對象名.屬性名
        class Student:
            cls_id = 102
            
        stu = Student()
        print(Student.cls_id)
        print(stu.cls_id)
        
        print("---------")
        
        Student.cls_id = 103
        print(Student.cls_id)
        print(stu.cls_id)
        
        print("---------")
        
        stu.cls_id = 104
        print(Student.cls_id)
        print(stu.cls_id)
        

        運行結果:

        102
        102
        ---------
        103
        103
        ---------
        103
        104
  • 1.2 對象屬性與類屬性的區別

    • (1)內存中存在數量不同
      • 對象屬性:創建了多少個對象,內存中就有多少份
      • 類屬性:內存中只存在類中只存在一份,但是對象可讀取
    • (2)定義位置不同
      • 對象屬性:定義在類內方法內
      • 類屬性:定義在類內方法外
    • (3)訪問方式不同
      • 對象屬性:對象名.屬性名
      • 類屬性:類名.屬性名
        • 讀取類屬性時,可以通過對象名.屬性名
    • (4)生命周期不同
      • 對象屬性:創建對象 -> 對象被系統回收
      • 類屬性:加載全局命名空間 -> 程序結束
    • (5)所有者不同
      • 對象屬性:屬於對象
      • 類屬性:屬於類

2. 靜態方法

  • 概念:類中的一個方法
  • 格式:在方法上面添加@staticmethod
  • 參數:可以有參數,也可以沒有參數
  • 應用場景:一般用於和類對象以及實例對象無關的代碼
  • 使用方式:
    • (1)類名.類方法名
    • (2)對象名.類方法名
  • 使用場景示例:
    • 如:學生管理系統的展示主菜單

3. 類方法

  • 概念:無需實例化就可以通過類直接調用的方法
  • 格式:在方法上面添加@classmethod
  • 參數:方法的第一個參數接收的一定是類本身
    • 方法的參數為cls也可以是其他名稱,但是一般默認為cls
    • cls指向類對象(也就是下邊示例中Goods)
  • 應用場景:當一個方法中只涉及到靜態屬性的時候可以使用類方法(類方法用來修改類屬性)
  • 使用方式:
    • (1)對象名.類方法名
    • (2)類名.類方法名
  • 使用場景示例:
    • 修改所有商品的折扣
      class Goods():
          discount = 1
          def __init__(self,price,name):
              self.name = name
              self.price = price
          def price_discount(self):
              return self.price * Goods.discount
          @classmethod
          def change_discount(cls,new_discount):
              cls.discount = new_discount
          
          goods = Goods(20, "audi")
          print(goods.price_discount())
          Goods.change_discount(0.5)
          print(goods.price_discount())
      
      運行結果:
      20
      10.0
      

        

       


免責聲明!

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



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