一、封装之Property
prooerty是一种特殊的属性,访问时他会执行一段功能(函数)然后返回
'''
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 * self.height) egon=People('egon',75,1.80) #调用类产生一个对象 egon.bmi=egon.weight / (egon.height * egon.height) print(egon.bmi)
property方法
class People:
def __init__(self,name,weight,height):
self.name=name
self.weight=weight
self.height=height
@property #把一个函数伪装成数据属性,对象调用函数属性不需要加(),@property ,不加括号调用打印得到的是绑定方法的内存地址
def bmi(self):
return self.weight / (self.height * self.height)
#方法一调用(@property注释掉,1、调用类产生对象,2、对象.函数属性名,3、然后打印即可)
# egon=People('egon',75,1.80)
# egon.bmi=egon.weight / (egon.height * egon.height) #没有此行打印的是一个绑定方法的内存地址
# print(egon.bmi) # =>>>23.148148148148145
#
# yl=People('yangli',85,1.74)
# yl.bmi=yl.weight / (yl.height * yl.height)
# print(yl.bmi)
# 首先需要明确。bmi是算出来的,不是一个固定死的值,也就说我们必须编写一个功能,每次调用该功能
#都会立即计算一个值
egon=People('egon',75,1.80)
# yl=People('yangli',85,1.74)
# 但很明显人的bmi值听起来更像一个名词而非动词
# print(egon.bmi()) #=>>>>>23.148148148148145
# print(yl.bmi()) #=>>>>28.075042938300964
# 于是我们需要为bmi这个函数添加装饰器,将其伪装成一个数据属性
egon.weight=70
print(egon.bmi) #21.604938271604937,调用egon.bmi本质就是触发函数bmi的执行,从而拿到其返回值
# print(yl.bmi)
二、多态
1、什么是多态?
多态指的是同一种事物的多种形态
2、为什么使用多态?
用基类创建一套统一的规则,强制子类去遵循(使用抽象类去实现),这样便可以在不考虑对象具体类型的前提下,而直接使用对象下的方法
3、如何用多态?
# class Animal: #基类创建一套统一的规则,猫,狗,猪都属于动物,都具有动物的属性,吃、喝、跑、叫 # def eat(self): #在子类中引用相同函数属性的名字,可以不考虑对象的类型,直接使用对象下的方法 # pass # # def drink(self): # pass # # def run(self): # pass # # def bark(self): # pass # # class Cat(Animal): # def jiao(self): # print('喵喵喵') # # class Dog(Animal): # def speak(self): # print('汪汪汪') # # class Pig(Animal): # def han(self): # print('哼哼哼') # # c=Cat() # d=Dog() # p=Pig() # # # # 多态性:可以在不用考虑对象具体类型的前提下而直接使用对象下的方法 # # c.eat() # # d.eat() # # p.eat() # # # # c.drink() # # d.drink() # # p.drink() # # # # d.bark() # # p.bark() # # c.bark() # # d.speak() # c.jiao() # p.han()