一、继承
#动物#
#老虎、狮子、大象
#动物有共性
##定义一个动物:1.有4条腿;2.陆地上跑;3.需要进食(属性+能力)
##猫:同上(继承了动物的属性和能力)
##老鼠:同上#Python里面也有这种结构,class类的继承
#1#案例猫
class Animal: #父类def run(self):print('Animal is running...')class Cat(Animal): #子类 (子类中,填父类的名字)继承==>所有属性+方法passcat=Cat()
cat.run()
#2#练习老鼠
class Animal: #父类def run(self):print('Animal is running...')class Cat(Animal): #子类 (子类中,填父类的名字)继承==>所有属性+方法passclass Mouse(Animal):passcat=Cat()
cat.run()mouse=Mouse()
mouse.run()
#3#父类里面,构造函数(若父类有构造函数)
class Animal:def __init__(self,food):#父类,传参self.legs=4self.food=fooddef run(self):print('Animal is running...')class Cat(Animal):passclass Mouse(Animal):passcat=Cat("fish")#则子类,也要传参#实例化子类
print(cat.legs)
print(cat.food)#实例化#mouse=Mouse("苞谷")
#print(cat.legs)
#print(mouse.food)
#4#子类 继承 父类原因 [子类可继承+创建其他方法]
# 类比于,神话故事父亲有神力 ==传承 给自己的孩子==> 孩子出生就有父亲的所有能力(这种神力)+同时也有属于自己的能力==>后辈越来越强#5#父类里面,构造函数
class Animal:def __init__(self,food):#父类,传参self.legs=4self.food=fooddef run(self):print('Animal is running...')class Cat(Animal):def ability(self):print('the cat can catch mice')class Mouse(Animal):pass####父类不能用子类方法,报错
animal=Animal()
animal.ability()
二、 多态
#刚刚 子类 继承 父类
##子类对继承过来的情况,进行更改#动物=>1.猫 2.老鼠
#所以,[吃东西]这个类,在[动物/猫/老鼠]有不同的表现,对该功能进行重写==>多态
#多态=以继承为前提,在继承的基础上进行重构
class Animal:def __init__(self,food):#父类,传参self.legs=4self.food=fooddef eat(self):print('I like eating')class Cat(Animal):
# passdef eat(self):print('I like eating '+self.food)#多态,# [改变子类中的方法;不影响父类中方法的内容]#同一个方法名,可以出现2种不同的形态,在类的多态中,对构造函数的[重构]#对两个对象调用eat方法,结果一样 =======>但猫吃鱼,改变结果
animal=Animal("food")
animal.eat()cat=Cat("fish")
cat.eat()#继承父类#多态:既可以改变[子类的方法],又[不改变父类方法的内容]
三、重构
#重构:保留父类属性+自己属性 [先继承,再重构]
#父类中不合适的进行重构
class Animal:def __init__(self,food):#父类,传参self.legs=4self.food=fooddef eat(self):print('I like eating')class Cat(Animal):
#---#新构造函数------------------------------------------def __init__(self,food,color):Animal.__init__(self,food)#继承父类的,构造函数(参数与父类一致)self.color=color#添加自己的属性
#------------------------------------------------------def eat(self):print('I like eating'+self.food)#多态,# [改变子类中的方法;不影响父类中方法的内容]#同一个方法名,可以出现2种不同的形态,在类的多态中,对构造函数的[重构]animal=Animal("food")
animal.eat()cat=Cat("fish",'white')#new属性color
cat.eat()#继承父类
print(cat.legs)
#-------------------------
print(cat.color)
#--------------------------