一、什么是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)
结果:报错