property
将方法伪装成为属性,可以不用加上()就可以调出其属性。
但是用__dict__,不能调出此属性
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from math import pi class Circle: def __init__(self,r): self.r = r @property def perimeter(self): return 2*pi*self.r @property def area(self): return self.r**2*pi c1 = Circle(5) print(c1.area) # 圆的面积 print(c1.perimeter) # 圆的周长
property有2个配合使用的函数
property可以和setter,delecter配合使用,已达到get,set,delect的功能
class Stuff_price: def __init__(self,original_price,discount): self.__original_price=original_price self.__discount=discount @property def price(self): print('我执行了了价格') return self.__original_price*self.__discount @price.setter def price(self,new_discount): print('我执行了setter') self.__discount=new_discount @price.deleter def price(self): print('我执行了 delecte') # del self.__original_price apple=Stuff_price(10,0.5) print(apple.price) apple.price=0.8 print(apple.price) del apple.price print(apple.price) '''输出结果我执行了了价格 5.0 我执行了setter 我执行了了价格 8.0 我执行了 delecte 我执行了了价格 8.0 '''
解析
注意del 并不是表示去删除,而是表示,去操作方法的引子。
这样便实现了,正常的属性的调法