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'
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- python自定义封装带颜色的logging模块
- C语言中的时间函数clock()和time()你都了解吗
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)