• 从零开始的Python学习Episode 19——面向对象(2)


    面向对象之继承

    继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称

    为基类或超类,新建的类称为派生类或子类。

    子类会“”遗传”父类的属性,从而解决代码重用问题。

    单继承与多继承

    class Par1:
        pass
    class Par2:
        pass
    class ch1(Par1):#单继承
        pass
    class ch2(Par1,Par2):#多继承
        pass

    派生中方法调用的规则

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

    但在多继承中情况就会稍微有点复杂,因为如果两个父类中有相同名字的方法的话,子类会调用哪一个?

    试验:

    class Par1():
        def f1(self):
            print('this is par1.f1')
    class Par2():
        def f1(self):
            print('this is par2.f1')
    class ch2(Par1,Par2):
        pass
    
    obj = ch2()
    obj.f1()
    #输出:this is par1.f1
    class Par1():
        def f2(self):
            print('this is par1.f1')
    class Par2():
        def f1(self):
            print('this is par2.f1')
    class ch2(Par1,Par2):
        pass
    
    obj = ch2()
    obj.f1()
    #输出:this is par2.f1

    看来是优先在第一个父类中找,找不到再找下一个。

    class Grandpar:
        def f1(self):
            print('this is grandpar.f1')
    class Par1(Grandpar):
        def f2(self):
            print('this is par1.f1')
    class Par2(Grandpar):
        def f1(self):
            print('this is par2.f1')
    class ch2(Par1,Par2):
        pass
    
    obj = ch2()
    obj.f1()
    #输出:this is par2.f1
    class Grandpar:
        def f1(self):
            print('this is grandpar.f1')
    class Par1(Grandpar):
        def f2(self):
            print('this is par1.f1')
    class Par2(Grandpar):
        def f2(self):
            print('this is par2.f1')
    class ch2(Par1,Par2):
        pass
    
    obj = ch2()
    obj.f1()
    #输出:this is grandpar.f1

    当父类还有父类的时候,会先在Par1,Par2中找,找不到再从他们的父类中找。

    如果在子类中需要使用父类中已经被重写的方法,则可以通过

    类名.方法名()

    的方法调用。

  • 相关阅读:
    爬虫——网页解析利器--re & xpath
    机器学习——决策树
    爬虫——控制台抓包和requests.post()发送请求
    爬虫——爬取Ajax动态加载网页
    爬虫——urllib爬虫模块
    从零搭建一个SpringCloud项目之Zuul(四)
    从零搭建一个SpringCloud项目之hystrix(三)
    从零搭建一个SpringCloud项目之Eureka(一)
    SpringBoot内置Tomcat启动的源码分析
    初始化Bean的扩展InitializingBean和BeanPostProcessor
  • 原文地址:https://www.cnblogs.com/smilepup-hhr/p/10341886.html
Copyright © 2020-2023  润新知