zoukankan      html  css  js  c++  java
  • 从零开始的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中找,找不到再从他们的父类中找。

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

    类名.方法名()

    的方法调用。

  • 相关阅读:
    pku3225 区间
    pku2136 Vertical Histogram
    NOI2006 最大获利
    APIO2010 特别行动队
    停电两夜
    偷偷乐一把
    那些花儿...
    一件一块钱的小事
    web service 的Section=ResponseStatusLine 错误和skype
    杂谈
  • 原文地址:https://www.cnblogs.com/smilepup-hhr/p/10341886.html
Copyright © 2011-2022 走看看