# 属性初识
# 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装饰器,伪装成属性