在课堂上使用财产

时间:2020-07-30 07:50:48

标签: python class properties

我无法理解此代码,

class Price:
    def __init__(self, price):
    self.price = price

    @property
    def price(self):
        return self.__price

   @price.setter
   def price(self, price):
        if price < 0:
            raise ValueError("Price cannot be negative")
        self.__price = price


pc = Price(500)
pc.price = -100
print(pc.price)

当我们使用属性对象时,是否意味着将始终先执行@property装饰器下的方法,然后再执行@ price.setter装饰器下的方法?或者是周围的其他方式。有人可以详细说明财产的用途吗?我阅读了一些在线说明,但仍然感到困惑。 谢谢。

1 个答案:

答案 0 :(得分:0)

使用属性是为了在尝试获取/设置/删除属性时允许执行某些代码。您的例子很好-没有property.setter,我们代码的用户可以轻松地将-100分配给Price的实例。

但是我们不想让价格低于零...因此我们需要将price描述为属性,并为其添加一些逻辑。然后,每次访问property(获取Price().price)或尝试设置price.price)时,都会使用price setter代码。