• Python | 继承


    本文目录:

    一、继承定义

    二、继承关系结构图

    三、子类重写父类

    四、多继承

    一、继承定义

      类似基因的继承,在创建类时,该类可以从另一个或另几个类那里继承变量和方法新建的类是子类,

      被继承的是父类注意子类能继承父类的变量和方法父类的私有属性不能被继承

    class Animal:
        we_are = "Animal"
        def eat(self):
            print("动物会吃...")
    
    
    class Cat(Animal):
        pass
    
    cat = Cat()
    print(cat.we_are)
    cat.eat()
    
    
    """
    执行程序,会打印:
    Animal
    动物会吃...
    """

    二、继承关系结构图

      当一个类有多个父类时,或几个类存在复杂的继承关系时,可以通过 类名.__mro__ 查看继承关系链

    class Animal():
        pass
    
    
    class Cat(Animal):
        pass
    
    
    class Duanmao(Cat):
        pass
    
    
    print(Duanmao.__mro__)
    # (<class '__main__.Duanmao'>, <class '__main__.Cat'>, <class '__main__.Animal'>, <class 'object'>)
    
    print(Cat.__mro__)
    # (<class '__main__.Cat'>, <class '__main__.Animal'>, <class 'object'>)

    三、子类重写父类

      1. 当父类的方法不能满足子类的使用时,子类可以重写父类方法,重写后会将父类的方法覆盖掉。

      在pycharm中重写后,行号旁边会出现一个圈儿,方便查看

     1 class Animal():
     2     def eat(self):
     3         print("animal eat")
     4 
     5 
     6 class Cat(Animal):
     7     def eat(self):
     8         print("fish")
     9 
    10 
    11 c = Cat()
    12 c.eat()  # 打印 fish

      2. 但通常,重写只是在父类方法的基础上加一部分内容,此时需要 调用父类被覆盖的实例方法

     1 class Animal():
     2     def eat(self):
     3         print("animal eat")
     4 
     5 
     6 class Cat(Animal):
     7     def eat(self):
     8         print("fish")
     9         # 调用父类被覆盖的实例方法
    10         # 格式一:父类名.方法名(对象)
    11         Animal.eat(self)  # 是self调用的,对象就是self
    12         # 格式二:super(本类名,对象).方法名()
    13         super(Cat, self).eat()
    14         # 格式三:super().方法名()   优先记忆
    15         super().eat()
    16         super().hello()
    17 
    18     def __str__(self):
    19         """重写object类中的__str__方法"""
    20         print(super().__str__())  # 打印 <__main__.Cat object at 0x10c7d6ba8>  
    21         return "hhhh"
    22 
    23 
    24 c = Cat()
    25 c.eat()  # 打印 fish
    26 print(c)  # 打印 hhhh

    四、多继承

       Python可以使用多继承,但仍然推荐使用单继承,这样编程思路更加清晰。

      当一个子类有多个父类时,若父类中有相同的方法或变量,排在前面的会将后面的覆盖掉。

     1 class Father():
     2     def sing(self):
     3         print("爸爸会唱歌")
     4 
     5     def dance(self):
     6         print("爸爸不会跳舞")
     7 
     8 
     9 class Mother():
    10     def sing(self):
    11         print("妈妈不会唱歌")
    12 
    13     def dance(self):
    14         print("妈妈会跳舞")
    15 
    16 
    17 class Child(Father, Mother):
    18     def sing(self):
    19         # Father(self).sing()
    20         Father.sing(self)  # self 调用了Father中的sing方法
    21 
    22         Mother.dance(self)
    23 
    24 
    25 c = Child()
    26 c.dance() 
    27 # print(c.__mro__)  错啦
    28 print(Child.__mro__)
    29 """
    30 打印:
    31 爸爸不会跳舞
    32 (<class '__main__.Child'>, <class '__main__.Father'>, <class '__main__.Mother'>, <class 'object'>)
    33 """

      

      首先继承写在前面的类,根据__mro__的打印结果:Father覆盖了Mother中的同名方法,
      但可以用Child类中写的形式,随意调用各个父类中的方法
      其实是 "三、子类重写父类" 文件中的第一种调用父类被覆盖的实例方法

     【学习笔记,仅用于个人记录和交流】
  • 相关阅读:
    css应用视觉设计
    HTML中name、id、class的区别介绍
    css怎么选择父元素下的某个元素?
    css权重如何计算的?
    如何更有效的消灭watchdogs挖矿病毒?华为云DCS Redis为您支招
    分布式缓存Redis应用场景解析
    【云速建站】让你轻轻松松建立属于自己的网店
    一张图读懂什么是专属分布式存储
    【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(2)
    【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)
  • 原文地址:https://www.cnblogs.com/ykit/p/11245702.html
Copyright © 2020-2023  润新知