python的property怎么使用

本篇内容介绍了“python的property怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都网站设计、称多网络推广、成都小程序开发、称多网络营销、称多企业策划、称多品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供称多建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

一、联动

案例

class Goods:def __init__(self, name, price, count=1):self.name = name  # 商品名称self.price = price  # 商品单价self.count = float(count)  # 商品数量self.total = price*count

    
apple = Goods('苹果', 5, 2)print(apple.total)apple.count = 3print(apple.total)out:1010

在上述案例中建了一个Goods(商品)类,它有name(商品名称)、price(商品单价)、count(商品数量)。它内部还有个toatl(商品总价)属性,这个属性是根据单价乘数量计算得来的。

接下来建了一个实例:apple,名称是苹果,单价是5,数量是2。现在打印apple.total显示是10,结果正常,可是当我们把数量改成3以后再打印apple.total结果仍然是10,数据没有产生联动!编程的时候一定要避免这样的情况发生。

正解

class Goods:def __init__(self, name, price, count=1):self.name = name  # 商品名称self.price = price  # 商品单价self.count = float(count)  # 商品数量@propertydef total(self):  # 商品总价return self.price*self.count


apple = Goods('苹果', 5, 2)print(apple.total)apple.count = 3print(apple.total)

在这段代码中,通过将total方法伪装成属性的方式,我们可以获得联动的total属性。

好了,请记住使用property的第一条优点——数据联动。

二、健壮

继续上述的案例讲健壮,假设商品数量是售货员手动输入的,若遇到售货员不小心将数量输成了’a’会发生什么呢?

class Goods:def __init__(self, name, price, count=1):self.name = name  # 商品名称self.price = price  # 商品单价self.count = float(count)  # 商品数量@propertydef total(self):  # 商品总价return self.price*self.count


apple = Goods('苹果', 5, 'a')print(apple.total)out:ValueError: could not convert string to float: 'a'

这下程序直接报错,异常退出了!当然你可以指责售货员的不小心,但同时也不能否认自己编写的代码容错率低,也就是不健壮,动不动就报错!合格的程序员编写代码时必须考虑到各种情况,提高程序的健壮性。下面我们针对上述的情况更正代码:

class Goods:def __init__(self, name, price, count=1):self.name = name  # 商品名称self.price = price  # 商品单价self.__count = count  # 商品数量@propertydef count(self):try:self.__count = float(self.__count)except ValueError:print('输入数量有误,数值自动修正为1.0,请注意核对!')self.__count = 1.0return self.__count
    
    @count.setterdef count(self, n):try:n = float(n)except ValueError:print('输入数量有误,数值自动修正为1.0,请注意核对!')n = 1.0self.__count = n
   
    @propertydef total(self):  # 商品总价return self.price*self.count


apple = Goods('苹果', 5, 'a')print(apple.total)apple.count = 'bb'print(apple.total)out:输入数量有误,数值自动修正为1.0,请注意核对!5.0输入数量有误,数值自动修正为1.0,请注意核对!5.0

注意@函数名.setter的写法,这个函数名要和前一个@property下一行的函数名要一致。

三、安全

继续上述的代码讲安全,数据安全有一项重要的内容就是确保数据值在合理范围区间,如果不对重要数据进行值范围校验就会发生重大差错。假设上述案例中某营业员将销售数量改成负数会发生什么?显而易见的会发生账目差错,所以我们要对count数值进行校验,不能接受负数。

因此必须修改@count.setter部分:

    @count.setterdef count(self, n):try:n = float(n)if n < 0:print('输入数量有误,数值自动修正为0,请注意核对!')n = 0except ValueError:print('输入数量有误,数值自动修正为1.0,请注意核对!')n = 1.0self.__count = n

最后补充一下property的deleter部分,它可以在调用del apple.count时删除__count属性:

    @count.deleterdef count(self):del self.__count

“python的property怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


本文名称:python的property怎么使用
URL标题:http://hbruida.cn/article/pgdocd.html