@property的作用
在调用对象方法时可以向调用对象属性一样
如何使用@property
- 定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数
- 调用时,无需括号
方法:foo_obj.func()property属性:foo_obj.prop
# 创建类
class Foo:# init 初始化方法def __init__(self):self.num = 100# 创建对象方法@propertydef prop(self):return self.numf = Foo()
# 普通调用方法
# print(f.prop())
"""
100
"""
# 装饰器调用
print(f.prop)
"""
100
"""
@property其他使用方式
- @xxx.setter
- @xxx.deleter
作用:在类中可以定义同名的实例方法,不过需要@方法名.装饰器来装饰,可以实现向实例方法中传递参数的操作,@property是用来装饰没有参数的实例方法
class Goods(object):# 初始化方法def __init__(self):# 原价self.org_price = 1000# 设置折扣self.discount = 0.7# 定义获取price的方法@propertydef price(self):return self.org_price * self.discount# 定义设置price的方法@price.setterdef price(self, val):# 设置原价self.org_price = val# 定义删除price的方法@price.deleterdef price(self):print("删除org_price\n")del self.org_priceif __name__ == '__main__':# 创建对象goods = Goods()# 获取价格print(goods.price)# 设置价格goods.price = 500# 获取价格print(goods.price)# 删除价格del goods.price# print(goods.price)"""
700.0
350.0
删除org_price
"""
@property作为类属性
- 类属性 即:在类中定义值为property对象的类属性
类属性方式,创建值为property对象的类属性
property方法中有个四个参数
- 第一个参数是方法名,调用 对象.属性 时自动触发执行方法
- 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
- 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
- 第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息
class Goods(object):# 初始化方法def __init__(self):self.org_price = 1000self.discount = 0.7# 获取价格def price(self):return self.org_price * self.discount# 设置价格def set_price(self, val):self.org_price = val# 删除价格def del_price(self):print("删除 org_price !")# 第一个参数是 调用BAR 对象时自动触发# 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法# 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法# 第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息BAR = property(price, set_price, del_price, "这个类使用了property!!")# 创建对象
good = Goods()
# 获取价格 相当于good.price()
print(good.BAR)
# 设置价格 相当于good.set_price(500)
good.BAR = 500
print(good.BAR)
# 删除价格 相当于good.del_price()
del good.BAR
# 获取 文档注释
print(Goods.BAR.__doc__)
"""
700.0
350.0
删除 org_price !
这个类使用了property!!
"""