• python 类的继承


    类的继承

    • 相关概念:

      • 继承:父类的属性和方法子类可以直接拥有称为继承

      • 派生:子类在父类的基础上衍生出来的新的特征(属性和方法)

      • 总结:其实他们是一回事,只是描述问题的角度侧重点不同(继承侧重相同点,派生侧重不同点)

    • 相关语法:

      
      
      # class Animal(object):
        # 当没有指定父类时,相当默认父类为object
        class Animal:
            def __init__(self, name):
                self.name = name
      ​
            def eat(self):
                print('小动物喜欢一天到晚吃个不停')
                  
      # 继承自Animal
      class Dog(Animal):
          pass
      ​
      d = Dog('旺财')
      # 直接拥有父类的方法
      d.eat()
      # 直接拥有父类的属性
      print(d.name)
    • 派生:子类可以扩充属性和方法

      
      
      class Animal:
          def run(self):
              print('小动物喜欢到处乱跑')
              
      class Rabbit(Animal):
          # 添加方法
          def eat(self):
              print('爱吃萝卜和青菜')
              
      xiaobai = Rabbit()
      xiaobai.run()
      xiaobai.eat()
      # 添加属性
      xiaobai.color = 'white'
      print(xiaobai.color)
    • 重写:

      • 父类的方法完全不合适,子类需要全部的覆盖

      • 父类的方法合适,但是需要完善

      • 示例:

      
      
      class Animal:
            def run(self):
                print('小动物喜欢到处乱跑')
      ​
            def eat(self):
                print('小动物也是一天三顿')
                  
      class Cat(Animal):
          # 当父类的方法完全不合适时,可以覆盖重写
          def run(self):
              print('俺走的是猫步')
      ​
          # 父类的方法合适,但是子类需要添加内容完善功能
          def eat(self):
              # 调用父类方法,不建议使用
              # Animal.eat(self)
              # super(Cat, self).eat()
              # 类名及self可以不传
              super().eat()
              print('不过俺喜欢吃鱼')
      ​
      jiafei = Cat()
      jiafei.run()
      jiafei.eat()
    • 多继承

      • 概念:一个类可以有多个父类

      • 示例:

      
      
      class A:
          def eat(self):
              print('eat func of A')
           
      class B:
          def eat(self):
              print('eat func of B')
              
      # 多继承,多个父类使用逗号隔开
      class C(B, A):
          def eat(self):
              # 当多个父类拥有相同的方法时,会按照继承时的先后顺序进行选择
              # super().eat()
              # 如果非要使用后面的类的方法时,可以明确指定进行调用
              A.eat(self)
              
      c = C()
      c.eat()
  • 相关阅读:
    Andorid开发中如何去除标题栏title
    Andorid自动读取短信验证码
    1020. Tree Traversals (25)
    1019. General Palindromic Number (20)
    1003. Emergency (25)
    1014. Waiting in Line (30)
    ubuntu14.04上java jdk & mvn安装
    LVM基本概念及工作原理
    利用Screen重启DevStack服务
    ubuntu14.04 桌面版/服务器版安装DevStack教程
  • 原文地址:https://www.cnblogs.com/kiki5881/p/8572680.html
Copyright © 2020-2023  润新知