Python_4-property属性的使用

转自https://blog.csdn.net/w18306890492/article/details/82899251
property的作用是将一个属性的操作方法封装为一个属性,用户使用起来就和操作普通属性完全一致。

property属性有两种使用方式:

装饰器 :在方法上应用装饰器

类属性:在类中定义值为property对象的类属性。

首先看装饰器的方式:

  • 我们要首先明白python中有经典类和新式类,新式类的属性比经典类属性丰富(如果类继承object,那么该类是新式类,python3中默认所有类为新式类)。
  • 关于property属性要知道经典类中属性只有一种访问方式,@property 。新式类中的属性有三种访问方式:@property , @方法名.setter , @方法名.deleter
  • 由于新式类具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
class Goods(object):
    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()
print(obj.price)
obj.price        # 获取商品价格
obj.price = 200  # 修改商品原价
print(obj.price)
del obj.price     # 删除商品原价

OUTPUT:

80.0
160.0

接下来看类属性方式,创建值为property对象的类属性。
当使用类属性的方式创建property属性时,经典类和新式类无区别。当调用操作属性的方法时,直接使用该类属性名。

property方法中有个四个参数 (参数顺序不能改变,无此函数时参数为None)
第一个参数是方法名,调用 对象.属性 时自动触发执行方法
第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
第四个参数是字符串,调用 类名.属性.doc ,此参数是该属性的描述信息

class Goods(object):
    """这是一个商品价格类"""
    def __init__(self):
        self.original_price = 100
        self.discount = 0.8

    def get_price(self):
        my_price = self.original_price * self.discount
        return my_price

    # 必须两个参数
    def set_price(self, value):
        self.original_price = value

    def del_price(self):
        del self.original_price

    price = property(get_price, set_price, del_price, "调整商品价格")
    # 少参数时的处理方法
    #price = property(get_price, None, del_price, "调整商品价格")

goods = Goods()
print(goods.price)  # 获取价格
goods.price = 200  # 修改价格
print(goods.price)
print(Goods.price.__doc__)  # 获取price 类属性描述信息  调整商品价格
print(Goods.__doc__)  # 获取类的描述信息
print(goods.__doc__)  # 获取Goods对象的描述信息
del goods.price  # 删除价格#
#print(goods.price)

OUTPUT:

80.0
160.0
调整商品价格
这是一个商品价格类
这是一个商品价格类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值