面向对象之property

TOC

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




原文地址:https://www.cnblogs.com/cnhyk/p/11944833.html