1 2 3 4

property装饰器

1、property
装饰器:装饰器是在不修改被装饰对象源代码以及调用方式的前提下为被装饰对象添加新功能的可调用对象
property是一个装饰器,是用来绑定给对象的方法伪造成一个数据属性

装饰器property,可以将类中的函数“伪装成”对象的数据属性,对象在访问该特殊属性时会触发功能的执行,
然后将返回值作为本次访问的结果。

使用property有效地保证了属性访问的一致性。另外property还提供设置和删除属性的功能

应用场景:有的功能属性听起来更像数据属性,python则提供了一种装饰器,可以将功能属性伪装成数据属性

案例:
"""
成人的BMI数值:
过轻:低于18.5
正常:18.5-23.9
过重:24-27
肥胖:28-32
非常肥胖, 高于32
  体质指数(BMI)=体重(kg)÷身高^2(m)
  EX:70kg÷(1.75×1.75)=22.86
"""


# 案例一:

# class People:
# def __init__(self, name, weight, height):
# self.name = name
# self.weight = weight
# self.height = height
#
# # 定义函数的原因1:
# # 1、从bmi的公式上看,bmi应该是触发功能计算得到的
# # 2、bmi是随着身高、体重的变化而动态变化的,不是一个固定的值
# # 说白了,每次都是需要临时计算得到的
#
# # 但是bmi听起来更像是一个数据属性,而非功能
# @property
# def bmi(self):
# return self.weight / (self.height ** 2)


# obj1 = People('egon', 70, 1.83)
# print(obj1.bmi())

# obj1.height=1.86
# print(obj1.bmi())

# print(obj1.bmi)

# # 案例二:
# class People:
# def __init__(self, name):
# self.__name = name
#
# def get_name(self):
# return self.__name
#
# def set_name(self, val):
# if type(val) is not str:
# print('必须传入str类型')
# return
# self.__name = val
#
# def del_name(self):
# print('不让删除')
# # del self.__name
#
# name=property(get_name,set_name,del_name)
#
# obj1=People('egon')
# # print(obj1.get_name())
# # obj1.set_name('EGON')
# # print(obj1.get_name())
# # obj1.del_name()
#
#
#
# # 人正常的思维逻辑
# print(obj1.name) #
# # obj1.name=18
# # del obj1.name



# 案例三:
class People:
def __init__(self, name):
self.__name = name


@property
def name(self): # obj1.name
return self.__name

@name.setter
def name(self, val): # obj1.name='EGON'
if type(val) is not str:
print('必须传入str类型')
return
self.__name = val

@name.deleter
def name(self): # del obj1.name
print('不让删除')
# del self.__name


obj1=People('egon')
# 人正常的思维逻辑
print(obj1.name) #
# obj1.name=18
# del obj1.name
 
posted @ 2020-04-09 18:15  臭弟弟d  阅读(204)  评论(0编辑  收藏  举报