★ 基本定義 一種用起來像是使用的實例屬性一樣的特殊屬性,可以對應於某個方法 ★ property屬性的兩種方式 裝飾器 => 在方法上應用裝飾器 類屬性 => 在類中定義值為property對象的類屬性 ★ 裝飾器方式 代碼示例 class Goods(object): def __init__( ...
★ 基本定義
一種用起來像是使用的實例屬性一樣的特殊屬性,可以對應於某個方法
★ property屬性的兩種方式
- 裝飾器 => 在方法上應用裝飾器
- 類屬性 => 在類中定義值為property對象的類屬性
★ 裝飾器方式
-
代碼示例
class Goods(object): def __init__(self): # 原價 self.original_price = 100 # 折扣 self.discount = 0.8 @property def price(self): # 實際價格 = 原價 * 折扣 new_price = self.original_price * self.discount return new_price # 新式類獨有 @price.setter def price(self, value): self.original_price = value # 新式類獨有 @price.deleter def price(self): del self.original_price obj = Goods() obj.price # 獲取商品價格 obj.price = 200 # 修改商品原價 del obj.price # 刪除商品原價
-
示例說明
1.定義時,在實例方法的基礎上添加 @property 裝飾器;並且僅有一個self參數 2.經典類中的屬性只有一種訪問方式,其對應被 @property 修飾的方法 3.新式類中的屬性有三種訪問方式,並分別對應了三個被@property、@方法名.setter、@方法名.deleter修飾的方法;我們可以根據它們幾個屬性的訪問特點,分別將三個方法定義為對同一個屬性:獲取、修改、刪除
-
應用實例
class Pager: def __init__(self, current_page): # 用戶當前請求的頁碼(第一頁、第二頁...) self.current_page = current_page # 每頁預設顯示10條數據 self.per_items = 10 @property def start(self): val = (self.current_page - 1) * self.per_items return val @property def end(self): val = self.current_page * self.per_items return val p = Pager(1) p.start # 就是起始值,即:m p.end # 就是結束值,即:n # Python的property屬性的功能是:property屬性內部進行一系列的邏輯計算,最終將計算結果返回。
★ 類屬性方式
-
代碼示例
class Goods(object): def __init__(self): # 原價 self.original_price = 100 # 折扣 self.discount = 0.8 def get_price(self): # 實際價格 = 原價 * 折扣 new_price = self.original_price * self.discount return new_price def set_price(self, value): self.original_price = value def del_price(self): del self.original_price PRICE = property(get_price, set_price, del_price, '價格屬性描述...') obj = Goods() obj.PRICE # 獲取商品價格 obj.PRICE = 200 # 修改商品原價 del obj.PRICE # 刪除商品原價
-
示例說明
1.當使用類屬性的方式創建property屬性時,經典類 和 新式類 無區別 2.property方法中有個四個參數 第一個參數是方法名,調用 對象.屬性 時自動觸發執行方法 第二個參數是方法名,調用 對象.屬性 = XXX 時自動觸發執行方法 第三個參數是方法名,調用 del 對象.屬性 時自動觸發執行方法 第四個參數是字元串,調用 對象.屬性.__doc__ ,此參數是該屬性的描述信息 3.由於 類屬性方式 創建property屬性具有3種訪問方式,我們可以根據它們幾個屬性的訪問特點,分別將三個方法定義為對同一個屬性:獲取、修改、刪除