• python继承


    面向对象三大特性

    1.封装根据职责将属性和方法封装到-个抽象的类中

    2.继承实现代码的重用,相同的代码不需要重复的编写

    3.多态不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

    继承的概念:子类拥有父类的所有方法和属性

    class 子类名(父类名):
                 pass

    继承具有传递性

    1. class Animal:
    2. def eat(self):
    3. print("吃")
    4. def drink(self):
    5. print("喝")
    6. def run(self):
    7. print("跑")
    8. def sleep(self):
    9. print("睡")
    10. class Dog(Animal):
    11. def bark(self):
    12. print("汪汪")
    13. class Xiaotianquan(Dog):
    14. def fly(self):
    15. print("飞")
    16. class Cat(Animal):
    17. def catch(self):
    18. print("抓老鼠")
    19. wangcai = Dog()
    20. wangcai.drink()
    21. wangcai.run()
    22. wangcai.eat()
    23. wangcai.bark()
    24. wangcai.sleep()
    25. xtq = Xiaotianquan()
    26. xtq.run()
    27. xtq.bark()
    28. cat = Cat()
    29. cat.run()
    30. cat.catch()

    父类的重写,有两种,

    (1)覆盖父类的方法

    (2)对父类进行扩展

    覆盖:

    ●子类拥有父类的所有方法和属性,父类的方法实现和子类的方法实现完全不同

    ●子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发

    ●当父类的方法实现不能满足子类需求时,可以对方法进行重写(override)

    扩展:

    在开发中,子类的方法实现中包含父类的方法实现

    在需要的位置使用super().父类方法

    但是在python2.0中也可以使用 父类名.方法(self)(但是不建议使用)

    1. class Animal:
    2. def eat(self):
    3. print("吃")
    4. def drink(self):
    5. print("喝")
    6. def run(self):
    7. print("跑")
    8. def sleep(self):
    9. print("睡")
    10. class Dog(Animal):
    11. def bark(self):
    12. print("汪汪")
    13. class Xiaotianquan(Dog):
    14. def fly(self):
    15. print("飞")
    16. def bark(self):
    17. # 针对子类特有的需求,编写代码
    18. print("神一样")
    19. # 使用super调用原本在父类中封装的方法
    20. super().bark()
    21. # 增加其他子类的代码
    22. print("$$$$")
    23. # class Cat(Animal):
    24. # def catch(self):
    25. # print("抓老鼠")
    26. # wangcai = Dog()
    27. # wangcai.drink()
    28. # wangcai.run()
    29. # wangcai.eat()
    30. # wangcai.bark()
    31. # wangcai.sleep()
    32. xtq = Xiaotianquan()
    33. xtq.run()
    34. xtq.bark()
    35. # cat = Cat()
    36. # cat.run()
    37. # cat.catch()
    38. 结果:
    39. 神一样
    40. 汪汪
    41. $$$$


    神一样
    汪汪

    父类的私有属性和私有方法

    1.子类对象不能在自己的方法内部,直接访问父类的私有属性或私有方法

    2.子类对象可以通过父类的公有方法间接访问到私有属性或私有方法

    1. class A:
    2. def __init__(self):
    3. self.num1 = 100
    4. # 前面加两个下划线
    5. self.__num2 = 200
    6. def __test(self):
    7. print("私有方法:%d %d" % (self.num1, self.__num2))
    8. def test(self):
    9. print("父类的公有方法%d" % self.__num2)
    10. self.__test()
    11. class B(A):
    12. def demo(self):
    13. # 1.子类的对象方法中不能访问父类的私有属性
    14. print("私有属性%d" % self.num1)
    15. # 不能调用父类的私有方法
    16. self.test()
    17. # 创建一个子类对象
    18. b = B()
    19. # print(b)
    20. # # 外界不允许访问私有属性和私有方法
    21. # # print(b.__num2)
    22. # # b.demo()
    23. # # 外界可以访问父类的公有属性和公有方法
    24. # print(b.num1)
    25. #b.demo()
    26. b.test()
    27. # 子类对象可以调用父类的公有方法

    ●私有属性、方法是对象的隐私,不对外公开, 外界以及子类都不能直接访问

    ●私有属性、方法通常用于做-些内部的事情
     

    1. class A:
    2. def __init__(self):
    3. self.num1 = 100
    4. # 前面加两个下划线
    5. self.__num2 = 200
    6. def __test(self):
    7. print("私有方法:%d %d" % self.num1, self.__num2)
    8. class B(A):
    9. def demo(self):
    10. # 1.子类的对象方法中不能访问父类的私有属性
    11. print("私有属性%d" % self.__num2)
    12. # 不能调用父类的私有方法
    13. self.__test()
    14. # 创建一个子类对象
    15. b = B()
    16. print(b)
    17. # 外界不允许访问私有属性和私有方法
    18. # print(b.__num2)
    19. # b.demo()

  • 相关阅读:
    MQTT-主题基础
    【LeetCode热题100】--148.排序链表
    程序环境和预处理
    MAC版InDesign 2022 17.4(ID2022)已发布,原生支持Intel和M1/M2三系统,速度提升80%
    KMP算法
    Istio中流量劫持机制
    JVS-rules中的基础与复合变量:规则引擎的心脏
    数据研发“新人”如何快速落地?
    非常非常地重试重试组件,使用杠铃的
    C#中的四种类型转换
  • 原文地址:https://blog.csdn.net/qq_44832048/article/details/125493790