#封装
#把数据(属性)、实现(方法、函数)放在类内部完成,对外显示一个接口(能被调用的函数)。
#也就是说,封装好的类,是一个黑盒子。
#想要做什么,直接告诉 “类” 一声,就好了,类就自动完成好了
#与函数对比,类是更高层次的封装(更高级的函数)
#当然,类实现了更高层次的封装,不仅仅封装了操作,还封装了数据。
#比如,构造一个函数show(),就能够实现打印所有变量的值。而不关心变量名字等具体信息
#使用,set、get能够在设置前,对数值逻辑进行判断
构造一个类,在类中构造一个方法,能够显示该类对应的属性。
直接调用:
class person(): def __init__(self,name,age,grade): print("=====开始======") self.name=name self.age=age self.grade=grade张三=person('张三',23,98)print(张三.name)print(张三.age)print(张三.grade)#每次打太麻烦
封装:
class person(): def __init__(self,name,age,grade): print("=====开始======") self.name=name self.age=age self.grade=grade def show(self): print(self.name) print(self.age) print(self.grade) print("=====结束======")张三=person('张三',23,98)张三.show()#可直接输出李四=person(李四,24,88)李四.show()王五=person(王五,25,66)王五.show()
继承:子类继承了父类(基类)的方法
两个理解:
(自上向下)
⚫ 提取共性,以开发游戏为例:
⚫ 比如,游戏里面有很多种类不同的怪兽,不
同的怪兽之间存在很多相同的属性、动作(方法)
⚫ 我们构造一个基类“怪兽”
⚫ 把不同种类怪兽中,相同的属性、方法,放
在基类“怪兽”里面就可以了。
(自上而下)
⚫ 更好地实现扩展:游戏充值类。
⚫ 如果,适逢双11,我们可以在充值类中,增
加一个双11活动。
⚫ 碰到游戏纪念日,增加一个折扣。
⚫ 碰到在线人数达到10万,增加一个活动折扣。
⚫ 如此,增加下去,充值类,越来越大
⚫ 每次修改起来很麻烦,
⚫ 继承,每次活动,都从基类中继承一下。
class guaishou:def shout(self):print("AAAAAAAA")class fei(guaishou):def fly(self):#()中填写的就是父类,定义的jisuanji这个类会继承(包含)students的函数print("我能飞。。。。")class shui(guaishou):def swim(self):print("我在水里游。。。")class lu(guaishou):def run(self):print("奔跑吧,兄弟。。。")xiaobai=guaishou()xiaobai.shout()feishou=fei()feishou.shout()#可以直接调用父类的函数(方法)feishou.fly()shuishou=shui()shuishou.shout()shuishou.swim()lushou=lu()lushou.shout()lushou.run()
输出结果:
AAAAAAAAAAAAAAAA我能飞。。。。AAAAAAAA我在水里游。。。AAAAAAAA奔跑吧,兄弟。。。
练习:
class student(): def learn(self): print("认真上课")class jisuanji(student):#()中填写的就是父类,定义的jisuanji这个类会继承(包含)students的函数 def biancheng(self): print("好好写代码")class jinrong(student): def jinrongjiaoyi(self): print("做好买卖")小明=student()小明.learn()小美=jisuanji()小美.learn()#可以直接调用父类的函数(方法)小美.biancheng()小爱=jinrong()小爱.learn()小爱.jinrongjiaoyi()
输出结果:
认真上课认真上课好好写代码认真上课做好买卖
多态: 对同一种现象做出的反应
子类执多态的方法
#子类继承了基类的方法(也就是输出),无需任何操作得到了基类的方法(输出)
#子类执行多态方法
#构造一个调用基类方法A,增加新子类,同样能使用该方法A
练习:
• 构造一个基类“学生” ,包含“学习”方法。
• 构造继承类“计算机专业学生”,重新实现方法“学习”。
• 构造继承类“金融专业学生”,重新实现方法“学习”。
• 构造一个函数fun,能够调用基类“学生”的方法。
• 构造不同类的对象,将其作为函数fun的参数
class student(): def learn(self): print("好好上课")class jisuanji(student): def learn(self): print("好好写代码")class jinrong(student): def learn(self): print("好好买卖交易")def fun(student):#()里是类名 print("====!!!=====") student.learn() print("====####=====")小明=student()小明.learn()xiaoming=jisuanji()xiaoming.learn()fun(xiaoming)xiaomei=jinrong()fun(xiaomei)xiaomei.learn()class meishu(student): def learn(self): print("画画")xiaowang=meishu()xiaowang.learn()fun(xiaowang)