标签:code 数据 div ini 个数 setter err typeerror 执行
‘‘‘ 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 ‘‘‘
class People: def __init__(self, name,weight,height) self.name=name self.weight=weight self.height=height @property. #即装饰器可以功能属性伪装成数据属性,使调用者调用时可以像调用数据一样调用功能属性 def bmi(self): return self.weight/(self.height**2) egon=People(‘egon‘,75,1.81) egon.bmi=egon.weight / (egon.height * egon.height) print(egon.bmi) yl=People(‘yangli‘,85,1.74) yl.bmi=yl.weight / (yl.height * yl.height) print(yl.bmi)
首先需要明确。bmi是算出来的,不是一个固定死的值也就说我们必须编写一个功能,每次调用该功能都
会立即计算一个值
egon=People (‘egon‘,75,1.81)
y1=People(‘yangli‘,85,1.74)
但很明显人的bmi听起来更像起来是个名次而非动词
print(egon.bmi())
print(y1.bmi())
于是我们需要为bmi这个函数添加装饰器,将其伪装成一个数据属性
egon.weight=70 # print(egon.bmi) #21.604938271604937,调用egon.bmi本质就是触发函数bmi的执行,从而拿到其返回值 # print(yl.bmi) # 了解 # egon.bmi=123 # egon.bmi背后对应的是一个函数,所以不能赋值 class People: def __init__(self,name): self.__name=name @property def name(self): #obj.name print(‘您现在访问的是用户名。。。‘) return self.__name @name.setter #obj.name=‘EGON‘ def name(self,x): # print(‘=================‘,x) if type(x) is not str: raise TypeError(‘名字必须是str类型,傻叉‘) self.__name=x @name.deleter def name(self): # print(‘就不让你删‘) del self.__name obj=People(‘egon‘) # print(obj.name) # print(obj.name()) # print(obj.name) # obj.name=‘EGON‘ # print(obj.name) # obj.name=123 del obj.name obj.name
标签:code 数据 div ini 个数 setter err typeerror 执行
原文地址:https://www.cnblogs.com/wuchenyu/p/8855923.html