Python property 函数 @property,@*.setter @*.deleter


Python property 函数 @property,@*.setter @*.deleter

  • 属性方法

属性方法 属性方法其实就是把类中的方法改造成属性的一种写法,该写法需要在方法上加上@property,例如:
from datetime import datetime from dateutil.relativedelta import relativedeltaclass Person:def __init__(self, name, birthday): self.name = name self.birthday = birthday@property def age(self): # 人的年龄是一个属性,但是需要由生日和当前时间计算得出 # 所以我们把这个方法包装成属性 ret = relativedelta(datetime.now(), datetime.strptime(self.birthday, '%Y-%m-%d')) return ret.yearsp1 = Person('李国庆', '1990-10-01') # 像访问实例属性一样 print(p1.age)

在面向对象中,类中通常会定义属性和方法,属性用来描述实例对象的特征,方法用来描述实例对象的动作。
像年龄这种需要一定动作来得出的属性,Python中我们会把这个方法描述成一个属性。
补充property的进阶用法
@property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。
【Python property 函数 @property,@*.setter @*.deleter】1、只有@property表示只读
2、同时有@property和@.setter表示可读可写
3、同时有@property和@
.setter和@*.deleter表示可读可写可删除
```python class Goods: 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_priceobj = Goods() print(obj.price)# 获取商品价格 obj.price = 200# 修改商品原价 print(obj.price) del obj.price# 删除商品原价 print(obj.price)# AttributeError: 'Goods' object has no attribute 'original_price'


    推荐阅读