Python使用@property装饰器

本文最后更新于:1 年前

1 - 1 这里已经使用特性的设值方法了,确保所创建实例的weight属性不能为负值。2@property装饰读值方法。3 实现特性的方法,其名称都与公开属性的名称一样——weight。4 真正的值存储在私有属性__weight中

class LineItem:
    """使用@property装饰器实现可读写的特性"""
    """表示订单中商品的类"""
    def __init__(self, description, weight, price):
        self.description = description
        self.weight = weight
        self.price = price

    def subtotal(self):
        return self.weight * self.price

    @property
    def weight(self):
        return self.__weight

    @weight.setter
    def weight(self, value):
        if value > 0:
            self.__weight = value
        else:
            raise ValueError('value must be > 0')

2 - 5 被装饰的读值方法有个.setter属性,这个属性也是装饰器;这个装饰器把读值方法和设值方法绑定在一起。6 如果值大于零,设置私有属性__weight。7 否则,抛出ValueError异常