当前位置:   article > 正文

面向对象——继承(python)

面向对象——继承(python)

一、单继承

  1. class Master():
  2. def __init__(self):
  3. self.kongfu = "[五香煎饼果子配方]"
  4. def make_cake(self):
  5. print(f"运用{self.kongfu}")
  6. class Prentice(Master):
  7. pass
  8. if __name__ == '__main__':
  9. result = Prentice()
  10. result.make_cake()
  11. print(Prentice.__mro__)

二、多继承

多继承就是一个类同事继承了多个父类

  1. class Master():
  2. def __init__(self):
  3. self.kongfu = "[五香煎饼果子配方]"
  4. def make_cake(self):
  5. print(f"运用{self.kongfu}")
  6. class School():
  7. def __init__(self):
  8. self.kongfu = "[香辣煎饼果子配方]"
  9. def make_cake(self):
  10. print(f"运用{self.kongfu}")
  11. class Prentice(Master):
  12. pass
  13. if __name__ == '__main__':
  14. result = Prentice()
  15. result.make_cake()
  16. print(Prentice.__mro__)

注意:当一个类有多个父类的时候。默认使用第一个父类的同名属性和方法

三、子类重写父类的同名方法和属性

子类和父类具有同名属性和方法,默认使用子类的同名属性和方法。

  1. class Master():
  2. def __init__(self):
  3. self.kongfu = "[五香煎饼果子配方]"
  4. def make_cake(self):
  5. print(f"运用{self.kongfu}")
  6. class School():
  7. def __init__(self):
  8. self.kongfu = "[香辣煎饼果子配方]"
  9. def make_cake(self):
  10. print(f"运用{self.kongfu}")
  11. class Prentice(Master):
  12. def __init__(self):
  13. self.kongfu = "[独创煎饼果子配方]"
  14. def make_cake(self):
  15. print(f"运用{self.kongfu}")
  16. pass
  17. if __name__ == '__main__':
  18. result = Prentice()
  19. result.make_cake()
  20. print(Prentice.__mro__)

四、子类调用父类的同名方法和属性

  1. class Master():
  2. def __init__(self):
  3. self.kongfu = "[五香煎饼果子配方]"
  4. def make_cake(self):
  5. print(f"运用{self.kongfu}")
  6. class School():
  7. def __init__(self):
  8. self.kongfu = "[香辣煎饼果子配方]"
  9. def make_cake(self):
  10. print(f"运用{self.kongfu}")
  11. class Prentice(Master,School):
  12. def __init__(self):
  13. self.kongfu = "[独创煎饼果子配方]"
  14. def make_cake(self):
  15. self.__init__()
  16. print(f"运用{self.kongfu}")
  17. def make_master_cake(self):
  18. Master.__init__(self)
  19. Master.make_cake(self)
  20. def make_school_cake(self):
  21. School.__init__(self)
  22. School.make_cake(self)
  23. if __name__ == '__main__':
  24. result = Prentice()
  25. result.make_cake()
  26. print(Prentice.__mro__)
  27. result.make_master_cake()
  28. result.make_school_cake()

五、多层继承

  1. class Master():
  2. def __init__(self):
  3. self.kongfu = "[五香煎饼果子配方]"
  4. def make_cake(self):
  5. print(f"运用{self.kongfu}")
  6. class School():
  7. def __init__(self):
  8. self.kongfu = "[香辣煎饼果子配方]"
  9. def make_cake(self):
  10. print(f"运用{self.kongfu}")
  11. class Prentice(Master,School):
  12. def __init__(self):
  13. self.kongfu = "[独创煎饼果子配方]"
  14. def make_cake(self):
  15. self.__init__()
  16. print(f"运用{self.kongfu}")
  17. def make_master_cake(self):
  18. Master.__init__(self)
  19. Master.make_cake(self)
  20. def make_school_cake(self):
  21. School.__init__(self)
  22. School.make_cake(self)
  23. class Tusun(Prentice):
  24. pass
  25. if __name__ == '__main__':
  26. result = Tusun()
  27. result.make_cake()
  28. print(Tusun.__mro__)
  29. result.make_master_cake()
  30. result.make_school_cake()

六、super()调用父类方法

使用super()可以自动查找父类。调用顺序遵循__mro__类属性的顺序。比较适合单继承实用。

  1. class Master():
  2. def __init__(self):
  3. self.kongfu = "[五香煎饼果子配方]"
  4. def make_cake(self):
  5. print(f"运用{self.kongfu}")
  6. class School():
  7. def __init__(self):
  8. self.kongfu = "[香辣煎饼果子配方]"
  9. def make_cake(self):
  10. print(f"运用{self.kongfu}")
  11. class Prentice(Master,School):
  12. def __init__(self):
  13. self.kongfu = "[独创煎饼果子配方]"
  14. def make_cake(self):
  15. self.__init__()
  16. print(f"运用{self.kongfu}")
  17. def make_master_cake(self):
  18. Master.__init__(self)
  19. Master.make_cake(self)
  20. def make_school_cake(self):
  21. School.__init__(self)
  22. School.make_cake(self)
  23. def make_old_cake(self):
  24. # # Master.__init__(self)
  25. # # Master.make_cake(self)
  26. # # School.__init__(self)
  27. # # School.make_cake(self)
  28. super(Prentice,self).__init__()
  29. super(Prentice,self).make_cake()
  30. class Tusun(Prentice):
  31. def make_old_cake(self):
  32. # Master.__init__(self)
  33. # Master.make_cake(self)
  34. # School.__init__(self)
  35. # School.make_cake(self)
  36. super().__init__()
  37. super().make_cake()
  38. if __name__ == '__main__':
  39. result = Tusun()
  40. r = Prentice()
  41. # result.make_cake()
  42. # print(Tusun.__mro__)
  43. # result.make_master_cake()
  44. # result.make_school_cake()
  45. result.make_old_cake()
  46. r.make_old_cake()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/913396
推荐阅读
相关标签
  

闽ICP备14008679号