zoukankan      html  css  js  c++  java
  • 继承and派生

        1.什么是继承?(python2与python3)
    在程序中继承是一种新建子类的方式,新创建的类称之为子类派生类,被继承
    的类称之为父类基类超类

    继承描述的是一种遗传关系,儿子可以重用爹的属性
    在python中继承的特点? 单继承&多继承

    python2与python3在继承上的区别
    新式类:但凡继承object类的子类,以及该子类的子子类,...都称之为新式类
    经典类:没有继承object类的子类,以及该子类的子子类,...都称之为经典类
    只有在python2中才会区分新式类和经典类




    2.为何用继承
    减少类与类代码冗余的问题



    3.如何继承
    先抽象再继承

    #在python中继承的特点? 单继承&多继承


    4.属性查找顺序
    在单继承背景下,无论式新式类还是经典类属性查找顺序都一样。
    先object类下,一层一层重类到父类中一次查找
    class Foo:
    def f1:
    print("foo f1")
    def f2:
    print("foo f2")
    f1()
    class car(Foo):
    def f1 :
    print("car f1")

    rep=car()
    rep.f2
    ######"foo f2" "car f1"



    在多继承背景下,如果一个子类继承了多个分支,但是多个分支没有汇聚到一
    个object类, 会按照从左到右的顺序一个分支一个分支的查找下去

    在多继承背景下(菱形继承)
    新式类:广度优先查找,最后找到子类相对的父类
    obj->a->b->e->c->f->d->g
    仅在新式类中存在a.mro(),相当于根据算法把查找顺序集合成列表


    经典类:深度优先查找,第一个分支直接找到子类相对的父类
    obj->a->b->e->g->c->f->d






    5.派生:在子类中定义自己的属性,如果与父类的属性重名,那么就以自己的为准

    再子类派生出的性属性中如何让重用父类功能的两种方式
    方式一:指名道姓的访问某一个类中的函数,与继承无关

    方式二:super方法内置函数super(父级,self)py3中不需要传参,调用该函数会得到一个特殊的对象,该对象是专门用来
    访问父类中属性的。强调:super会严格按照当前类的mro列表依次查找属性。
    class A:
    def test(self):
    print("A。test")
    super().test()
    class B:
    def test(self):
    print("from B")
    class C(A,B):
    pass

    c=C()
    c.test()
    ####### A.test from B

  • 相关阅读:
    linux(fedora) 下dvwa 建筑环境
    【ThinkingInC++】2、输入和输出流
    Caused by: java.lang.ClassNotFoundException: javax.transaction.TransactionManager
    SpringMVC注释启用
    XML wsdl soap xslt xsl ide
    一个解析RTSP 的URL函数
    PHP:header()函数
    jquery实现鼠标焦点十字效果
    拼出漂亮的表格
    Oracle中如何插入特殊字符:& 和 ' (多种解决方案)
  • 原文地址:https://www.cnblogs.com/yanhui1995/p/9836688.html
Copyright © 2011-2022 走看看