我无法理解此代码,
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装饰器下的方法?或者是周围的其他方式。有人可以详细说明财产的用途吗?我阅读了一些在线说明,但仍然感到困惑。 谢谢。
答案 0 :(得分:0)
使用属性是为了在尝试获取/设置/删除属性时允许执行某些代码。您的例子很好-没有property.setter
,我们代码的用户可以轻松地将-100分配给Price
的实例。
但是我们不想让价格低于零...因此我们需要将price
描述为属性,并为其添加一些逻辑。然后,每次访问property
(获取Price().price
)或尝试设置price
(.price
)时,都会使用price setter
代码。