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()
posted @ 2018-03-15 11:40  pythonsonline  阅读(193)  评论(0编辑  收藏  举报