一、什么是property
- 是一个python内置的装饰器,可以装饰在“类内部的方法”上。
- 可以将改方法的调用方式由
对象.方法()
转变为对象.方法
,也就是去掉了括号的调用方式
二、为什么要用property
- 在某些场景下,调用的方式只是用来获取计算后的某个值
- 必须通过
对象.方法
方式调用,让该方法看起来像动词
对象.方法()
转变为对象.方法
,也就是去掉了括号的调用方式- 在某些场景下,调用的方式只是用来获取计算后的某个值
- 必须通过
对象.方法
方式调用,让该方法看起来像动词
让名词的方法,调用时更为合理,目的是为了,迷惑调用者,调用的方式误以为是 属性
三、如何用
人体BMI指数计算
# 需求: 计算人体 bmi 指数 # 体重 / 身高的平方 # value = weight / (height * height) class User: def __init__(self, name, weight, height): self.__name = name self.weight = weight self.height = height @property # 放置在被装饰的方法之上 def bmi(self): value = self.weight / (self.height ** 2) return value def name(self): return self.__name user_obj = User('kody', 120, 1.7) user_obj.bmi # 调用时,可以去掉括号 print(user_obj.bmi)
四、property中的修改属性和删除属性
修改方法的名字,要与被property装饰器后的方法一样
class User: def __init__(self, name, weight, height): self.__name = name self.weight = weight self.height = height @property # 放置在被装饰的方法之上 def bmi(self): value = self.weight / (self.height ** 2) return value @property # 调用name的时候不需要加括号 def name(self): return self.__name @name.setter # 修改.__name中的属性 def name(self, value): self.__name = value @name.deleter def name(self): # 删除.__name中的属性 del self.__name user_obj = User('kody', 120, 1.7) user_obj.name = '高弟' # 修改参数可以不加括号 print(user_obj.name) 结果:高弟 print(user_obj.name) 结果:报错