zoukankan      html  css  js  c++  java
  • 继承

    继承

    一、什么是继承

    • 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类继承了一个类,类中的属性和方法就在子类中了
    • 继承的特性是:子类会遗传父类的属性
    • 继承是类与类之间的关系

    二、为什么要用继承

    • 使用继承可以减少代码的冗余

    三、对象的继承

    1. Python中支持一个类同时继承多个父类

    class student:
        pass
    class class1:
        pass
    class subject(student,class1):
        pass
    

    2.使用__bases__方法查看对象继承的类

    print(Sub1.__bases__)
    

    (<class 'main.Parent1'>, <class 'main.Parent2'>)

    • 在python3中如果一个类没有继承任何一个类,则默认继承object类
    • 在pythjon2中如果一个类没有继承任何类,不会继承object类
    print(Parent1.__bases__)
    

    (<class 'main.student'>, <class 'main.class1'>)

    四、类的分类

    4.1 新式类

    • 继承了object的类以及该类的所有子类,都是新式类
    • python3中所有的类都是新式类

    4.2.经典类

    • 没有继承object的类以及该类的子类,都是经典类
    • 只有python2中才有经典类

    五、继承

    5.1多层继承

    class D:  #D继承object
        print('ddd')
    class C(D):  #c继承D
        print('ccc')
    class B(C):  #B继承c
        print('bbb')
    class A(B):    #A继承B
        print('aaa')
    

    5.2多继承

    class D:  #D继承object
        print('ddd')
    class C:  
        print('ccc')
    class B:  
        print('bbb')
    class A(B,C,D):    #A继承B,C,D
        print('aaa')
    

    5.3多继承的多层继承

    class G:  #G继承object
        print('ddd')
    class F(G):  
        print('ccc')
    class E(G):  
        print('bbb')
    class D(G):  
        print('ddd')
    class C(F):  
        print('ccc')
    class B(E):  
        print('bbb')
    class A(B,C,D):    #A继承B,C,D
        print('aaa')
    

    5.4继承与重用性

    在开发程序的过程中,如果我们定义了一个类A,然后又想新建立另外一个类B,但是类B的大部分内容与类A的相同时

    我们不可能从头开始写一个类B,这就用到了类的继承的概念。

    通过继承的方式新建类B,让B继承A,B会‘遗传’A的所有属性(数据属性和函数属性),实现代码重用

    #继承的代码实现
    class Animal:
    
        def eat(self):
            print("%s 吃 " %self.name)
    
        def drink(self):
            print ("%s 喝 " %self.name)
    
        def shit(self):
            print ("%s 拉 " %self.name)
    
        def pee(self):
            print ("%s 撒 " %self.name)
    
    
    class Cat(Animal):
    
        def __init__(self, name):
            self.name = name
            self.breed = '猫'
    
        def cry(self):
            print('喵喵叫')
    
    class Dog(Animal):
    
        def __init__(self, name):
            self.name = name
            self.breed='狗'
    
        def cry(self):
            print('汪汪叫')
    
    
    # ######### 执行 #########
    
    c1 = Cat('小白家的小黑猫')
    c1.eat()
    
    c2 = Cat('小黑的小白猫')
    c2.drink()
    
    d1 = Dog('胖子家的小瘦狗')
    d1.eat()
    

    派生

    当然子类也可以添加自己的新属性或者在自己这里重新定义属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了。

  • 相关阅读:
    系列之前端:从重复造轮子说起
    Asp.Net Core基于JWT认证的数据接口网关Demo
    通过编写一个简单的日志类库来加深了解C#的文件访问控制
    .net core 的图片处理及二维码的生成及解析
    svmtrain和svmpredict简介
    svm小问题
    SVM (support vector machine)
    ubuntu在windows下的wubi安装
    ubuntu在windows下的wubi安装
    [转]无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues
  • 原文地址:https://www.cnblogs.com/wwbplus/p/11430344.html
Copyright © 2011-2022 走看看