• 继承


    #继承:
    #面向对象的三大特性:继承、封装、多态
    #python中类的继承分为:单继承和多继承
    #子类继承了父类的所有属性,子类自定义的属性如果与父类重名不会覆盖父类的属性,会先从子类中找

    #什么时候用继承:
    #当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
    #当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承

    '''
    #例如:
    class P1:
    pass
    class P2:
    pass
    class Su1(P1 ): #单继承,继承了p1
    pass
    class Su2(P1 ,P2) #多继承,同时继承了p1p1
    pass
    '''
    #实例:
    class Father:
    age = 40
    def __init__(self,name):
    self.name= name
    def f(self):
    print('%s给了儿子钱'%self.name)

    class Son(Father):
    age = 16
    print('son')

    s1 = Son('alex') #son类继承了Father
    print(s1.name)
    s1.f() #可以调用Father下的方法

    #son类和father类有重名属性age,但是son类的属性不会覆盖father类属性,会先从子类中找
    print('这是子类的属性————>',s1.age)
    print('这是父类的属性————>',Father.age)


    #接口继承:
      #接口继承实质上是:“要求做出一个抽象,这个抽象规定了一个兼容接口,使得外部调用者无需了解具体细节,
    可一视同仁的处理实现了特定接口的所有对象。这种在程序设计上称之为归一化。
      #接口继承就是在基类中定义子类要实现的方法名称(使用@abc.abstractmethod来装饰该函数,但它并未无
    实际功能),继承它的子类必须要自定义这个函数功能,若子类没有该函数,则开始实例化就会报错。
      #用途:某些类要实现相同名称但功能不同的函数时,就可以先定义一个父类,再在子类中定义必须要实现的
    功能。这样子类在继承父类时,就可以避免忘记必须要实现的功能函数了,它是用来规范子类的方法。实际上基类不
    用进行实例化操作,因为它完全没有意义。
      # 子类必须实现读写功能

    #实例:
    import abc
    class All_file(metaclass = abc.ABCMeta ):#父类定义了读写功能的接口
    @abc.abstractmethod
    def read(self):
    pass
    @abc.abstractmethod
    def write(self):
    pass

    class Text_1(All_file ): #Txt_1()继承了All_file(),子类必须实现读写功能
    def read(self):
    print('text_1--->read')
    def write(self):
    print('text_1--->write')

    class Text_2(All_file ): #Txt_2()继承了All_file(),子类必须实现读写功能
    def read(self):
    print('text_2--->read')
    def write(self):
    print('text_2--->write')

    s1 = Text_1 () #实例化
    s2 = Text_2()
    s1.read()
    s1.write()
    s2.read()
    s2.write()
    print('------------end----------')

    #继承顺序——mro线性顺序列表
    #实例:
    class A:
    def test(self):
    print('A')
    class B(A):
    def test(self):
    print('B')
    class C(A):
    def test(self):
    print('C')
    class D(B):
    def test(self):
    print('D')
    class E(C):
    def test(self):
    print('E')
    class F(D,E):
    def test(self):
    print('F')

    f1 = F() #实例化
    f1.test() #按照F->D->B->E->C->A顺序继承
    print(F.__mro__) #__mro__调出继承顺序
    print('----------end---------')


    #在子类中如何调用父类的方法
    #如下实例:
    #方法1
    class School:
    def __init__(self,name,addr):
    self.name = name
    self.addr = addr
    def teacher(self):
    print('这是来自父类的方法',self.name,self.addr)

    class Stu(School):
    def __init__(self,name,addr,sname): #注意点1
    School.__init__(self,name,addr) #注意点2
    self.sname = sname
    def run(self):
    School.teacher(self) #注意点3
    print('%s正在%s的操场跑步'%(self.sname,self.name))
    s1 = Stu('清华','北京','alex')
    s1.run()

    #方法2——super()的使用
    class School:
    def __init__(self,name,addr):
    self.name = name
    self.addr = addr
    def teacher(self):
    print('这是来自父类的方法',self.name,self.addr)

    class Stu(School):
    def __init__(self,name,addr,sname): #注意点1
    super().__init__(name,addr) #注意点2
    self.sname = sname
    def run(self):
    super().teacher() #注意点3
    print('%s正在%s的操场跑步'%(self.sname,self.name))
    s2 = Stu('北京大学','北京','alex')
    s2.run()
  • 相关阅读:
    前后端分离
    分库分表之终极设计方案
    题解-CF1491
    题解-ARC113
    题解-CF578D LCS Again
    团队冲刺第二阶段5
    团队冲刺第二阶段4
    团队冲刺第二阶段3
    团队冲刺第二阶段2
    团队冲刺第二阶段1
  • 原文地址:https://www.cnblogs.com/shadowfolk/p/14655545.html
Copyright © 2020-2023  润新知