property 是一个内置的装饰器函数,只在面向对象中使用
求一个圆的周长和面积
# 周长和面积都是通过类的方法得到
from math import pi class Cricle: def __init__(self,r): self.r = r def getPerimeter(self): return 2*pi*self.r def getArea(self): return pi*self.r**2 c1 = Cricle(5) print(c1.getPerimeter()) print(c1.getArea())
# 人的BMI,它是计算得来得,但更像是一个人的属性 # 传统做法 class Person: def __init__(self,name,high,weight): self.name = name self.high = high self.weight = weight def getBIM(self): return self.weight/(self.high**2) wangys=Person('wangys',1.75,70) print(wangys.getBIM()) # perporty class Person: def __init__(self,name,high,weight): self.name = name self.high = high self.weight = weight @property def bim(self): return self.weight/(self.high**2) wangys=Person('wangys',1.75,70) print(wangys.bim)
class Goods: # 定义了一个商品类 discount = 0.5 # 折扣是5折 def __init__(self,name,price): self.name = name self.__price = price # 将需要修改的属性设置成为私有属性 @property def price(self): # 定义一个正常的属性,然后做相应的操作 return self.__price * Goods.discount apple = Goods('apple',10) print(apple.price)
class Persion: def __init__(self,name): self.__name = name @property def name(self): return self.__name @name.setter def name(self,new_name): self.__name = new_name
# 但是圆的周长和面积更像圆的属性,使用property 将一个函数(无参数)伪装成一个类的属性 from math import pi class Cricle: def __init__(self,r): self.r = r @property def perimeter(self): return 2*pi*self.r @property def area(self): return pi*self.r**2 c1 = Cricle(5) print(c1.perimeter) print(c1.area)