属性property
# 属性初识 # class Bmi: # def __init__(self, name, weight, height): # self.weight = weight # self.name = name # self.height = height # # @property # 将一个方法伪装成属性,在代码本质上没有什么区别,但是在调用的时候显得更加合理 # def bmi(self): # b = self.weight / self.height ** 2 # if b < 18.5: # condition = "偏瘦" # elif b < 23.9: # condition = "正常" # elif b < 27: # condition = "过重" # else: # condition = "肥胖" # return "{}的bmi是{},{}".format(self.name, b, condition) # # bm = Bmi("ly", 50, 1.48) # #不加property的调用方式 print(bm.bmi()) # print(bm.bmi) # 将方法伪装成了属性 # print(bm.name) # bm.name = "yan" # print(bm.name) # print(bm.bmi) # # # # ly的bmi是22.826880934989045,正常 # # ly # # yan # # yan的bmi是22.826880934989045,正常 class Person: def __init__(self, name, age): self.name = name if type(age) is int: self.__age = age else: print("输入有误,应该输入数字") # 将他变为属性 @property def age(self): return self.__age # 改变伪装成属性的方法 @age.setter # 如果对对象.age 进行赋值操作,这个函数自动执行 def age(self,a1): if type(a1) is int: self.__age = a1 else: print("输入有误,应该输入数字") # print(a1) # print(666) @age.deleter # 执行del 操做时自动执行这个函数 def age(self): print("............") p1 = Person("dudu", 99) # # print(p1.age()) # print(p1.age) # p1.age = 66 # print(p1.age) print(p1.age) p1.age = 66 print(p1.age) # property :类似与bmi这中看着像名词,但是需要具体计算的,就用property装饰器,伪装成属性