封装之 property:
property是一种特殊的属性,访问它时会执行一段功能(函数),然后返回值。
把类体的方法,通过property函数来装饰,装饰过的方法对象可以通过调用属性的方式来调用,
对象名 +‘.’+属性名
例:
BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,
如果我们将其做成一个属性,更便于理解)
成人的BMI数值:
过轻:低于18.5
正常:18.5-23.9
过重:24-27
肥胖:28-32
非常肥胖, 高于32
体质指数(BMI)=体重(kg)÷身高^2(m)
EX:70kg÷(1.75×1.75)=22.86
1 class PeopleBMI:
2 def __init__(self,name,weight,height):
3 self.name=name
4 self.weight=weight
5 self.height=height
6
7 @property
8 def bim(self):
9 """
10 定义bim方法
11 :return:
12 """
13 return self.weight / (self.height**2)
14 # 定义对象
15 yangwei=PeopleBMI('yangwei',62.5,1.7)
16 """
17 这样我们就可以直接加点来调用。
18 调用yangwei.bmi本质就是触发函数bmi的执行,
19 从而拿到其返回值
20
21 """
22 print(yangwei.bim)
通过调用property属性 又衍生了 setter 与 deleter 两个装饰器。

1 class PeopleBMI:
2 def __init__(self,name,weight,height):
3 self.__name=name #把name属性隐藏起来。
4 self.weight=weight
5 self.height=height
6 @property
7 def name(self):
8 print('你正在访问用户名!') # 我们可以加一系列逻辑判断。
9 return self. __name
10
11 @name.setter #按照原方法调用
12 def name(self,nname):
13 if type(nname)is not str:
14 raise TypeError('必须为str 类型')
15 self.__name=nname
16
17 @name.deleter
18 def name(self):
19 print('确认删除吗?')
20 del self.__name
21
22 obj=PeopleBMI('yangwei',62,1.7)
23 del obj.name
24 obj.name='egon'
View Code