zoukankan      html  css  js  c++  java
  • 2019年7月25日 类的继承 1

      面向对像: 继承,多态,封装

    class ParentClass1:
        pass
    
    class ParentClass2:
        pass
    
    class SubClass(ParentClass1):#单继承
        pass
    
    class SubClass2(ParentClass1,ParentClass2):#多继承
        pass

    子类定义的属性如果喝父类属性重名了,则优先调用子类的,没有覆盖这一说

    什么时候用继承:

    1.当类中有显著不同,并且较小类事较大类所需要的组件时,用组合。

    2.当类中有许多相同功能,提取这些共同的功能做成基类,用继承。

    继承同时具有两种含义:

    1.继承与派生:减小代码重用。(不独立,不推荐)

    2.声明某个子类兼容某基类,定义一个接口类,子类继承接口类,并且实现接口中定义的方法。(vip 推荐)

    class Dad:
        money=10
        def __init__(self,name):
            print('Dad')
            self.name=name
    
        def hit_son(self):
            print('%s 正在hit son'%self.name)
    
    class Son(Dad):
        money=55 #优先调用子类的,但不是覆盖
    
    
    s1=Son('sxj')#son继承类dad的属性方法,dad存在需要传递参数 name
    print(s1.money,s1.name,Dad.money)
    s1.hit_son()

    》》》》

    Dad
    55 sxj 10
    sxj 正在hit son

    接口继承:归一化设计。做出一个良好的抽象,这个抽象规定了一个兼容接口。

    import abc #接口继承强制子类起到限制作用
    class All_file(metaclass=abc.ABCMeta):#接口继承:定义父类,规定必须有read 和 write 方法,父类可以不实现,子类中但必须要有这2个方法
        @abc.abstractclassmethod#下面但抽象方法(强制子类必须有read和write方法)
        def read(self):
            pass
    
        def write(self):
            pass
    
    
    class Disk(All_file):
        def read(self):
            print('Disk read')
        def write(self):
            print('Disk write')
    
    class CDrom(All_file):
        pass
    
    class Mem(All_file):
        pass
    
    d1=Disk()
    d1.read()
    d1.write()

    》》》

    Disk read
    Disk write

  • 相关阅读:
    递归---Day29
    File类---Day28
    线程池---Day26
    微信公众号运营人员必备的软件工具网站合集
    消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
    itoa函数的递归实现(二级指针实现)
    二叉树——查找两个任意节点的最近祖先
    C#多线程(二)
    C#多线程(一)
    Websocket协议之php实现
  • 原文地址:https://www.cnblogs.com/python1988/p/11246648.html
Copyright © 2011-2022 走看看