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)所有者不同
- 對象屬性:屬於對象
- 類屬性:屬於類
- (1)內存中存在數量不同
2. 靜態方法
- 概念:類中的一個方法
- 格式:在方法上面添加
@staticmethod
- 參數:可以有參數,也可以沒有參數
- 應用場景:一般用於和類對象以及實例對象無關的代碼
- 使用方式:
- (1)
類名.類方法名
- (2)
對象名.類方法名
- (1)
- 使用場景示例:
- 如:學生管理系統的展示主菜單
3. 類方法
- 概念:無需實例化就可以通過類直接調用的方法
- 格式:在方法上面添加
@classmethod
- 參數:方法的第一個參數接收的一定是類本身
- 方法的參數為cls也可以是其他名稱,但是一般默認為cls
- cls指向類對象(也就是下邊示例中Goods)
- 應用場景:當一個方法中只涉及到靜態屬性的時候可以使用類方法(類方法用來修改類屬性)
- 使用方式:
- (1)
對象名.類方法名
- (2)
類名.類方法名
- (1)
- 使用場景示例:
- 修改所有商品的折扣
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
- 修改所有商品的折扣