property
来源:互联网 发布:南风知我意1七微百度云 编辑:程序博客网 时间:2024/06/14 15:58
一、property
@property把一个方法 伪装成一个属性
1.属性的值 是这个方法的返回值
2.这个方法不能有参数了
呐:(圆的小栗子)
from math import piclass Circle: def __init__(self,r): self.r = r @property def area(self): return self.r*self.r*pi @property def perimeter(self): return self.r*pi*2c1 = Circle(5)print(c1.area) # 就是没有括号了而已print(c1.perimeter)
呐2:
class Person: def __init__(self,name,height,weight): self.name = name self.height = height self.__weight = weight @property def bmi(self): return self.__weight / (self.height ** 2)li = Person('sunv',1.75,85)# print(li.bmi()) # 报错,不能加括号了,已变成属性,不再是方法print(li.bmi) #27.76
二、私有 + property
class Goods: __discount = 0.8 #静态属性 def __init__(self,name,price): self.__name = name self.__price = price # 原价 @property def price(self): # 折后价 return self.__price * Goods.__discount @price.setter def price(self,new_price): #修改原价 这里只能传一个参数(new_price) self.__price = new_priceapple = Goods('苹果',10)apple.price = 9 #settrt 有了settrt 就可以 改属性了,成真属性了print(apple.price) #property
升级版:
class Goods: __discount = 0.8 #静态属性 def __init__(self,name,price): self.__name = name self.__price = price #原价 @property def name(self): return self.__name @name.setter def name(self,new_name): self.__name = new_name @property def price(self): #折后价 return self.__price * Goods.__discount @price.setter def price(self,new_price): #修改原价 if type(new_price) is int: self.__price = new_priceapple = Goods('苹果',10)apple.price = 9 #settrt # 有了settrt 就可以 改属性了,成真属性了print(apple.price) #property # 7.2apple.name = '富士'print(apple.name) # 富士
NA:
封装
__私有+property
让对象的属性变得更安全了
获取到的对象的值可以进行一些加工
修改对象的值的同时可以进行一些验证
AI理解理解:
class Foo: @property def AAA(self): print('get的时候运行我啊') @AAA.setter def AAA(self,value): print('set的时候运行我啊') @AAA.deleter def AAA(self): print('delete的时候运行我啊')#只有在属性AAA定义property后才能定义AAA.setter,AAA.deleterf1=Foo()f1.AAA #property # get的时候运行我啊f1.AAA='aaa' #setter # set的时候运行我啊 一这样就触发setterdel f1.AAA #deleter # delete的时候运行我啊
加上deleter之后:
class Goods: __discount = 0.8 #静态属性 def __init__(self,name,price): self.__name = name self.__price = price #原价 @property def name(self): return self.__name @name.setter def name(self,new_name): self.__name = new_name @name.deleter # 若没有deleter 则下面的调用就会报错! def name(self): # AttributeError: can't delete attribute del self.__name @property def price(self): #折后价 return self.__price * Goods.__discount @price.setter def price(self,new_price): #修改原价 if type(new_price) is int: self.__price = new_priceapple = Goods('苹果',10)# del apple.nameprint(apple.name) # 因为删了,所以报错
从前慢 --- 洪尘
阅读全文
0 0
- property
- property
- Property
- @property
- @property
- property
- @property(..,..)
- property
- @property
- property
- property
- @property
- property()
- @property
- property
- @property
- property
- @property
- springboot学习总结系列(一):多环境下(开发环境,生产环境)使用yml 或 properties 配置文件
- nginx基本配置与参数说明
- C# 文件上传 默认最大为4M的解决方法
- 将代码块从一台电脑快速挪到另一台电脑上
- Map函数的学习与理解
- property
- 对象存储oss挂载工具ossfs的使用
- USER_LOGONID_DUP 请检查收款账号是不是自己的签约支付宝账号。 原因及处理
- python中的计时模块:time.time()
- Burp Suite基础教学 之Spider
- arpack库问题,原因未知(已解决)
- lssvm工具箱使用心得
- 蓝牙开发经验小结——蓝牙通讯
- There is no setter for property named 'storeId' in 'class com.auth.entity.Auth'