isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
通过计算才能得到的属性封装 ,必须写方法,还想这么p.name访问,必须用到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
#_*_coding:utf-8_*_
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)
p=People('egon',75,1.81)
# p.bmi=p.weight / (p.height ** 2) #bmi 这个人的属性
# print(p.bmi)
#执行函数 加()
# print(p.bmi())
#加 @property 就可以直接调用
print(p.bmi)
#p,bmi=3333 #会报错不能赋值,因为它是方法
p.height=1.82
print(p.bmi)
#_*_coding:utf-8_*_
class People:
def __init__(self,name):
self.__name=name
@property
def name(self):
print('getter')
return self.__name
#name是赋值
@name.setter
def name(self,val):
print('setter',val)
#名字必须是字符串
if not isinstance(val,str):
print('名字必须是字符串类型')
return
self.__name=val
#删除
@name.deleter
def name(self):
print('deleter')
print('不允许删除')
p=People('egon')
# print(p.get_name())
# print(p.name)
# p.name
p.name='EGON'
# p.name=123
print(p.name)
#删除
#del p.name