装饰器@property

 第一种:由于新式类中具有三种访问方式,我们根据他们的几个属性的访问特点,分别将三个方法定义为同一个属性:获取、修改、删除

class Goods:
    '''python3中默认继承object类,所以有三种@property装饰器'''

    # python3和python2都可以使用  获取值
    @property  
    def price(self):
        print('@property')

    # 赋值
    @price.setter
    def price(self, value):
        print('@price.setter')

    # 删除
    @price.deleter
    def price(self):
        print('@price.deleter')

'''调用'''
obj = Goods()
obj.price           # 自动执行 @property 修饰的price方法,并获取方法的返回值
obj.price = 123     # 自动执行 @price.setter 修饰的price方法,并将123赋值给方法的参数
del obj.price       # 自动执行 @price.deleter 修饰的price方法

demo

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_price

'''调用'''
obj = Goods()
obj.price           # 获取商品价格
obj.price = 200     # 修改商品价格
del obj.price       # 删除商品原价

第二种:创建property属性的方式-类属性 property(fget=None, fset=None, fdel=None, doc=None) 四个参数

第一个参数是方法名,调用对象.属性时自动触发执行方法

第二个参数是方法名,调用对象.属性 = XXX时自动触发执行方法

第三个参数是方法名,调用del对象.属性时自动触发执行方法

第四个参数是字符串,调用对象.属性.__doc__,此参数是该属性的描述信息

class Foo:
    def get_bar(self):
        return  'laowang'
    BAR = property(get_bar)  # 类属性

obj = Foo()
result = obj.BAR  # 自动调用get_bar方法,并获取方法的返回值
print(result)

demo 

#coding:utf-8
class Foo:
    def get_bar(self):
        print('getter ....')
        return  'laowang'

    def set_bar(self, value):
        '''必须两个参数'''
        print('setter....')
        return 'set value' + value
    
    def del_bar(self):
        print('deleter...')
        return 'laowang'

    BAR = property(get_bar, set_bar, del_bar, 'description....')  # 类属性

obj = Foo()

obj.BAR  # 自动调用第一个参数中定义的方法:get_bar
obj.BAR = 'alex'  #自动调用第二个参数定义的方法:set_bar,并将'alex’当做参数传入
desc = Foo.BAR.__doc__  # 自动获取第四个参数中设置的值:description
print('desc')
del obj.BAR  # 自动调用第三个参数中定义的方法:del_bar方法

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值