一、面向对象特征之二:继承
继承:实现代码的重用,相同的代码不需要重复的写,子类继承父类及父类的父类的属性和方法
基类:父类
派生类:子类
继承:分为单继承和多继承
1、单继承
class 类名(父类):
类主体
#单继承class Anmail:#属性def __init__(self,name,age):self.name=nameself.age=age#方法def eat(self):print('父类方法:吃')def sleep(self):print('父类方法:睡')def speak(self):print('父类方法speak()')def __private(self):print('这是一个私有方法')class Cat(Anmail):pass# 重写父类的方法def speak(self):# 调用父类的方法,并且还需要进行扩展Anmail.speak(self)#子类扩展print('子类扩展')class Dog(Anmail):passmiao1=Cat('jiafeimiao',5)dog1=Dog('hh',2)miao1.eat()miao1.speak()# jiafeimiao.__private()# 判断某个实例是否是某个类的实例print(isinstance(miao1,Cat))print(isinstance(dog1,Cat))# 判断参数1是否为参数2的子类print(issubclass(Cat,Anmail))
2、多继承
class 类名(父类1,父类2,父类3):
类主体
注意:多继承,采用就近原则,从左到右
#多继承class Anmail:#属性def __init__(self,name,age):self.name=nameself.age=age#方法def eat(self):print('父类方法:吃')def sleep(self):print('父类方法:睡')def speak(self):16print('父类方法speak()')def __private(self):print('这是一个私有方法')class Cat:passdef speak(self):print('喵喵。。。。')class JiaFeiCat(Cat,Anmail):passjiafeicat1=JiaFeiCat('jiafeicat1',2)jiafeicat1.speak() # 先会调用Cat类中的speak方法,如果没有再去找下一个父类是否有此方法
注意:
1、子类调用方法,先找自己,然后再去找父类,再找父类的父类,依次类推
2、子类不能继承父类及父类的父类的私有属性及方法
3、能写父类方法
1、覆盖父类方法 子类中重写父类的方法
2、扩展父类方法
父类名.方法名(self) 调用父类的方法
二、面向对象第三大特征:多态
多态:不同的子类对象调用相同的方法,产生不同的执行结果(呈现出多态的形态)
class zfb:'''支付宝支付'''def zhifu(self):print('支付宝支付')class yl:'''银联支付'''def zhifu(self):print('银联支付')def pay(object):object.zhifu()# 支付宝支付zfb=zfb()pay(zfb)yl=yl()pay(yl)
作业
# 三、编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。# 实现思路及关键代码:# 1)定义乐器类Instrument,包括makeSound()方法,此方法中乐器声音:"乐器发出美妙的声音!"# 2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin# 二胡Erhu声音:"二胡拉响人生"# 钢琴Piano声音:"钢琴美妙无比"# 小提琴Violin声音:"小提琴来啦"# 3)用main类,多态的方式对不同乐器进行切换class Instrument():def makeSound(self):print("乐器发出美妙的声音!")class Erhu(Instrument):def makeSound(self):print("二胡拉响人生")class Piano(Instrument):def makeSound(self):print("钢琴美妙无比")class Violin(Instrument):def makeSound(self):print("小提琴来啦")def yz(yueqi):yueqi.makeSound()if __name__ == "__main__":erhu = Erhu()piano = Piano()violin = Violin()pipa = Instrument()yz(erhu)yz(piano)yz(violin)yz(pipa)
