面向对象之 属性
对象属性:
例一: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
要求:创建一个类来实现 bmi这个功能
class Person:
def __init__(self, name, hight, weight):
self.name = name
self.__hight = hight
self.__weight = weight
def bim(self):
return self.__weight / self.hight ** 2
p = P("张三",70, 1.7)
print(p.bmi())
# 这里的bmi是一个方法,但在现实生活中bim是一个名词,所以我们可以用@property 来把方法伪装成变量
class Person:
def __init__(self, name, hight, weight):
self.name = name
self.__hight = hight
self.__weight = weight
@property #在方法前添加@property就可以把方法伪装成变量,调用时和变量用法相同
def bim(self):
return self.__weight / self.hight ** 2
p = P("张三",70, 1.7)
print(p.bmi) # 这里只需要写成 p.bmi就可以不需要加括号
# 既然把bmi方法伪装成了变量,现在可以当做变量来调用,但是怎么去修改或删除呢?
# 我们可以用@方法名.setter 来实现像变量一样的修改方式 删除用@方法名.deleter
class Person:
def __init__(self, name, hight, weight):
self.name = name
self.__hight = hight
self.__weight = weight
@property #在方法前添加@property就可以把方法伪装成变量,调用时和变量用法相同
def hight(self):
self.hight = self.__hight
@hight.setter # 当需要修改时会自动执行下面代码
def hight(self,a):
self.__hight = a
@hight.deleter # 收到删除命令时会自动执行下面代码
def hight(self):
del self.__hight
p = P("张三",70, 1.7)
print(p.hight)
p.hight = 1.8
print(p.hight)
del p.hight

浙公网安备 33010602011771号