面向对象之property
一、什么是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)
结果:报错

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号