1. 程式人生 > >Python 類,property屬性(簡化屬性的操作),@property,property()

Python 類,property屬性(簡化屬性的操作),@property,property()

 

property屬性的建立方式有兩種:[email protected]裝飾器方式   2.類屬性方式 ( 類屬性=property() )

property屬性可以簡化例項物件對屬性的操作(獲取、設定),可以對屬性做型別校驗和預處理等。

裝飾器方式:

demo.py(@property,舊式類與新式類都有的方式):

class Goods:

    @property
    # 只能傳遞self引數。 必須返回一個值
    def size(self):
        return 100  # 必須返回一個值


obj = Goods()
result = obj.size  # 呼叫屬性(沒有用小括號,用屬性的方式呼叫函式)
print(result)

# property屬性一般對屬性值做一些預處理或格式化處理等,可以簡化屬性的獲取。

demo.py(@xxx.setter,@xxx.deleter,新式類支援的方式):

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         # 獲取商品價格 (自動呼叫@property修飾的函式)
obj.price = 200   # 修改商品原價 (自動呼叫@price.setter修飾的函式,並將200傳給函式)
del obj.price     # 刪除商品原價 (自動呼叫@price.deleter修飾的函式)

類屬性方式:

demo.py(類屬性建立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

    # 類屬性。  property(方法名1,方法名2,方法名3,"屬性描述資訊")
    PRICE = property(get_price, set_price, del_price, "屬性描述資訊...")



obj = Goods()
obj.PRICE         # 獲取商品價格  自動呼叫propert()函式第一個引數指定的方法。
obj.PRICE = 200   # 設定商品原價  自動呼叫propert()函式第二個引數指定的方法。
desc = Goods.PRICE.__doc__  # 自動獲取第四個引數中設定的值:屬性描述資訊...
print(desc)
del obj.PRICE     # 刪除商品原價  自動呼叫propert()函式第三個引數指定的方法。