一、面向对象特征之二:继承

继承:实现代码的重用,相同的代码不需要重复的写,子类继承父类及父类的父类的属性和方法
基类:父类
派生类:子类
继承:分为单继承和多继承

1、单继承

class 类名(父类):
类主体

  1. #单继承
  2. class Anmail:
  3. #属性
  4. def __init__(self,name,age):
  5. self.name=name
  6. self.age=age
  7. #方法
  8. def eat(self):
  9. print('父类方法:吃')
  10. def sleep(self):
  11. print('父类方法:睡')
  12. def speak(self):
  13. print('父类方法speak()')
  14. def __private(self):
  15. print('这是一个私有方法')
  16. class Cat(Anmail):
  17. pass
  18. # 重写父类的方法
  19. def speak(self):
  20. # 调用父类的方法,并且还需要进行扩展
  21. Anmail.speak(self)
  22. #子类扩展
  23. print('子类扩展')
  24. class Dog(Anmail):
  25. pass
  26. miao1=Cat('jiafeimiao',5)
  27. dog1=Dog('hh',2)
  28. miao1.eat()
  29. miao1.speak()
  30. # jiafeimiao.__private()
  31. # 判断某个实例是否是某个类的实例
  32. print(isinstance(miao1,Cat))
  33. print(isinstance(dog1,Cat))
  34. # 判断参数1是否为参数2的子类
  35. print(issubclass(Cat,Anmail))

2、多继承

class 类名(父类1,父类2,父类3):
类主体
注意:多继承,采用就近原则,从左到右

  1. #多继承
  2. class Anmail:
  3. #属性
  4. def __init__(self,name,age):
  5. self.name=name
  6. self.age=age
  7. #方法
  8. def eat(self):
  9. print('父类方法:吃')
  10. def sleep(self):
  11. print('父类方法:睡')
  12. def speak(self):16
  13. print('父类方法speak()')
  14. def __private(self):
  15. print('这是一个私有方法')
  16. class Cat:
  17. pass
  18. def speak(self):
  19. print('喵喵。。。。')
  20. class JiaFeiCat(Cat,Anmail):
  21. pass
  22. jiafeicat1=JiaFeiCat('jiafeicat1',2)
  23. jiafeicat1.speak() # 先会调用Cat类中的speak方法,如果没有再去找下一个父类是否有此方法

注意:
1、子类调用方法,先找自己,然后再去找父类,再找父类的父类,依次类推
2、子类不能继承父类及父类的父类的私有属性及方法
3、能写父类方法
1、覆盖父类方法 子类中重写父类的方法
2、扩展父类方法
父类名.方法名(self) 调用父类的方法

二、面向对象第三大特征:多态

多态:不同的子类对象调用相同的方法,产生不同的执行结果(呈现出多态的形态)

  1. class zfb:
  2. '''支付宝支付'''
  3. def zhifu(self):
  4. print('支付宝支付')
  5. class yl:
  6. '''银联支付'''
  7. def zhifu(self):
  8. print('银联支付')
  9. def pay(object):
  10. object.zhifu()
  11. # 支付宝支付
  12. zfb=zfb()
  13. pay(zfb)
  14. yl=yl()
  15. pay(yl)

作业

  1. # 三、编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
  2. # 实现思路及关键代码:
  3. # 1)定义乐器类Instrument,包括makeSound()方法,此方法中乐器声音:"乐器发出美妙的声音!"
  4. # 2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin
  5. # 二胡Erhu声音:"二胡拉响人生"
  6. # 钢琴Piano声音:"钢琴美妙无比"
  7. # 小提琴Violin声音:"小提琴来啦"
  8. # 3)用main类,多态的方式对不同乐器进行切换
  9. class Instrument():
  10. def makeSound(self):
  11. print("乐器发出美妙的声音!")
  12. class Erhu(Instrument):
  13. def makeSound(self):
  14. print("二胡拉响人生")
  15. class Piano(Instrument):
  16. def makeSound(self):
  17. print("钢琴美妙无比")
  18. class Violin(Instrument):
  19. def makeSound(self):
  20. print("小提琴来啦")
  21. def yz(yueqi):
  22. yueqi.makeSound()
  23. if __name__ == "__main__":
  24. erhu = Erhu()
  25. piano = Piano()
  26. violin = Violin()
  27. pipa = Instrument()
  28. yz(erhu)
  29. yz(piano)
  30. yz(violin)
  31. yz(pipa)