美文网首页Python学习我爱编程Python中文社区
Python学习笔记七 (继承,重写)

Python学习笔记七 (继承,重写)

作者: DragonFangQy | 来源:发表于2018-04-12 18:57 被阅读28次

    继承

    程序是什么?程序是用来解决实际问题的,也可以说是对现实世界的一种量化,一种现实世界的映射。
    在实际生活中有子承父业的说法,在程序世界中有没有呢?答案是有的。

    什么是继承

    子承父业是继承,继承是一种关系,两个人之间的关系。在程序世界中的映射是怎样的呢?程序中的继承也是一种关系,是两个类之间的关系。既然是两个类之间的关系,就需要确定一下继承顺序,类比现实世界,程序中的被继承者类称为父类或基类,继承者类称为子类或派生类。

    继承的格式

    
    class Animal(object):  
        pass
    
    # class 类名(父类名):
    #    方法列表 
    
    
    

    所有的类都继承 object 类,object 类是所有类的父类或基类。

    单继承

    什么是单继承

    单继承,只有一个直接父类的类,称为单继承。

    
    class 类名(父类名):  
        pass
    
    
    

    多继承

    与单继承相对的是单继承,有多个直接父类,称为多继承

    
    class 类名(父类名1,父类名2,父类名3.... 父类名n):  
        pass
    
    
    

    多层继承

    多层继承和多继承的区别 多继承,横向,就像是一片地上有很多高楼一样。多层继承,纵向,一栋高楼有很多层。

    
    class Animal(object):
        pass
    
    class Dog(Animal):
        pass
    
    
    
    多层继承

    Dog 继承自 Animal,Animal继承自 object,object 是所有类的父类

    重写

    方法的重写

    什么是重写

    在子类中创建一个方法,和父类中的某个方法同名,就是重写(方法的重写或方法的覆写)

    
    class Animal(object):
        def eat(self):
            print("动物吃东西")
    
    
    class Dog(Animal):
        def eat(self):
            print("狗吃东西")
    
    
    dog = Dog()
    dog.eat()  # 默认调用子类的方法
    
    # 结果为:
    # 狗吃东西
    
    
    

    重写的作用

    当父类中的方法不符合我们的需求时,可以通过重写,实现我们的需求。

    方法可以重写,属性可不可以重写?答案是可以的

    属性的重写

    
    class Animal(object):
        def __init__(self):
            self.age = 120
    
    
    class Dog(Animal):
        def __init__(self):
            self.age = 12
    
    
    dog = Dog()
    print("狗狗的年龄%d " % dog.age)  # 默认调用子类的属性
    
    # 结果为:
    # 狗狗的年龄12 
    
    
    

    调用父类的方法

    重写之后,如果发现父类的方法还有价值,可以调用父类的方法

    通过父类名强制调用

    一般用于多继承

    
    class Animal(object):
        def __init__(self):
            self.age = 120
    
        def eat(self):
            print("动物吃东西")
    
    
    class Dog(Animal):
        def __init__(self):
            self.age = 12
    
        def eat(self):
            print("狗吃东西")
            Animal.eat(self)  # 在重写的方法内强制调用 父类名.父类方法名()   如果需要参数,则需要传参
    
    
    dog = Dog()
    dog.eat()  
    
    # 结果为:
    # 狗吃东西
    # 动物吃东西
    
    
    

    super() 兼容版

    python2、python3 都可用

    
    class Animal(object):
        def __init__(self):
            self.age = 120
    
        def eat(self):
            print("动物吃东西")
    
    
    class Dog(Animal):
        def __init__(self):
            self.age = 12
    
        def eat(self):
            print("狗吃东西")
            
            # 兼容版 super(子类名, 子类对象).父类方法()   如果需要参数,则需要传参      
            super(Dog, self).eat()  
    
    
    dog = Dog()
    dog.eat()
    
    # 结果为:
    # 狗吃东西
    # 动物吃东西
    
    
    

    super()

    python3 专属

    
    class Animal(object):
        def __init__(self):
            self.age = 120
    
        def eat(self):
            print("动物吃东西")
    
    
    class Dog(Animal):
        def __init__(self):
            self.age = 12
    
        def eat(self):
            print("狗吃东西")
            super().eat()  #  super().方法名()    如果需要参数,则需要传参
    
    
    dog = Dog()
    dog.eat()
    
    # 结果为:
    # 狗吃东西
    # 动物吃东西
    
    
    

    到此结   DragonFang   2018.4.12

    相关文章

      网友评论

        本文标题:Python学习笔记七 (继承,重写)

        本文链接:https://www.haomeiwen.com/subject/miufkftx.html