博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day28 property 装饰器
阅读量:5993 次
发布时间:2019-06-20

本文共 1810 字,大约阅读时间需要 6 分钟。

方法属性装饰器 本质上来说就是将方法的执行括号去掉,这样将一个方法掩饰成了一个变量名字,变成了类似属性的东西 内置装饰器函数,只在面向对象中使用
1 from math import pi 2 class Cricle: 3     def     __init__(self,r): 4         self.r = r 5     @property 6     def perimeter(self): 7         return 2*pi*self.r 8     @property 9     def area(self):10         return pi*self.r**211 12 c1 = Cricle(5)13 14 print(c1.perimeter)            # 伪装成一个变量,变成一个属性15 # print(c1.perimeter())        # 之前的实现方式16 print(c1.area)17 # print(c1.area())

既然是属性能不能改呢~   很明显是不能的
1 class Person: 2     def __init__(self,name,high,weight): 3         self.name = name 4         self.high = high 5         self.weight = weight 6     @property 7     def     bmi(self): 8         return self.weight / self.high ** 2 9 suyang = Person("苏阳",1.5,180)10 # print(suyang.bmi())    # 原先的调用方式11 print(suyang.bmi)    # 80.012 suyang.name = "sb"13 # suyang.bmi = 18            # 既然是属性,改改试试?.14     # AttributeError: can't set attribute    # 毕竟特么不是属性,本质上是方法啊

property 的实际用例
  商品打折     不让用户知道真实的价格只能看到打折后的价格
1 class Goods: 2     discount = 0.5                    # 打折力度 5折 3     def __init__(self,name,price): 4         self.name = name 5         self.__price = price        # 我才不会让别人知道我的价格 6     @property 7     def price(self): 8         return self.__price * Goods.discount 9 10 apple = Goods("苏阳",0.5)            11 print(apple.price)

补充:   修改属性 @ name.setter,将原有的属性进行更改替换
1 class Person: 2     def __init__(self,name): 3         self.__name = name 4     @property 5     def name(self): 6         return self.__name +"sb" 7     @name.setter                # 一般很难用到,计算出来的值一般是直接用不需要再处理了 8     def    name(self,new_name): 9         self.__name = new_name10 suyang  =  Person("苏阳")11 print(suyang.name)    # 苏阳sb12 suyang.name    = "suyang"13 print(suyang.name)    # suyangsb

 

转载于:https://www.cnblogs.com/shijieli/p/9922775.html

你可能感兴趣的文章
android中 回调方法,怎么转变为阻塞执行的方法
查看>>
.NET平台下的微信SDK(Rabbit.WeiXin)开源发布
查看>>
简要介绍如何集成Vitamio安卓版SDK
查看>>
BZOJ1107 : [POI2007]驾驶考试egz
查看>>
div与span区别及用法
查看>>
Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
查看>>
【转载】COM小结
查看>>
Python的高级特性2:列表推导式,生成器与迭代器
查看>>
Ubuntu 14.04 64位字体美化(使用黑文泉驿)
查看>>
[android] AndroidManifest.xml - 【 manifest -> permission】
查看>>
20150728月度会议
查看>>
explain mysql性能优化
查看>>
NoSql---MongoDB基本操作
查看>>
【移动开发】WIFI热点通信(二)
查看>>
C#多线程编程实例 螺纹与窗口交互
查看>>
ByteBuffer用法小结
查看>>
使用linux mysql客户端建立表时遇到格式解析的问题
查看>>
find the mincost route(最小环,最短路,floyd)
查看>>
什么是自主开发项目的限度就是猿?
查看>>
TCP 的那些事儿(上)
查看>>