zoukankan      html  css  js  c++  java
  • python之接口继承

    接口继承

    接口继承就是(基类)父类定义好2个函数属性(接口),所有的子类必须有这2个函数属性,缺一不可,不是说省代码的,是用来做强制性约束的

    基类里面的方法不用具体的实现,只是一个规范而已

    1.1实现一个一切皆文件的概念

    class Disk:
        def read(self):
            pass
        def write(self):
            pass
    class Cdrom:
        def read(self):
            pass
        def write(self):
            pass
    class Mem:
        def read(self):
            pass
        def write(self):
            pass

    1.2可以定义一个基类,对上面代码进行改进

    class Allfile:
        def read(self):
            pass
        def write(self):
            pass
    class Disk(Allfile):
        def read(self):
            print("disk read")
        def write(self):
            print("disk write")
    class Cdrom(Allfile):
        def read(self):
            print("cdrom read")
        def write(self):
            print("cdrom write")
    class Mem(Allfile):
        def read(self):
            print("mem read")
        def write(self):
            print("mem write")

    1.3但是子类也可以不按照你规定的出牌,Mem就是不听话,他不定义write的函数属性,然后就会从父类找。父类里面又是pass

    class Allfile:
        def read(self):
            pass
        def write(self):
            pass
    class Disk(Allfile):
        def read(self):
            print("disk read")
        def write(self):
            print("disk write")
    class Cdrom(Allfile):
        def read(self):
            print("cdrom read")
        def write(self):
            print("cdrom write")
    class Mem(Allfile):
        def read(self):
            print("mem read")
    m1=Mem()
    m1.read()
    m1.write()
    
    C:python35python3.exe D:/pyproject/day25/接口继承.py
    
    mem read

    1.4所以python就有一个专门的模块来实现这个强制性的约束子类,模块叫abc

    导入模块abc,给父类2个属性加上装饰器之后,如果子类再少属性的话,就直接报错了,这样就强制性的约束了子类必须有父类的2个方法了

    import abc
    class Allfile(metaclass=abc.ABCMeta):
        @abc.abstractstaticmethod
        def read(self):
            pass
        @abc.abstractstaticmethod
        def write(self):
            pass
    class Disk(Allfile):
        def read(self):
            print("disk read")
        def write(self):
            print("disk write")
    class Cdrom(Allfile):
        def read(self):
            print("cdrom read")
        def write(self):
            print("cdrom write")
    class Mem(Allfile):
        def read(self):
            print("mem read")
    m1=Mem()
    
    TypeError: Can't instantiate abstract class Mem with abstract methods write

    1.5当子类Mem也加上write这个方法之后就可以正常运行了

    import abc
    class Allfile(metaclass=abc.ABCMeta):
        @abc.abstractstaticmethod
        def read(self):
            pass
        @abc.abstractstaticmethod
        def write(self):
            pass
    class Disk(Allfile):
        def read(self):
            print("disk read")
        def write(self):
            print("disk write")
    class Cdrom(Allfile):
        def read(self):
            print("cdrom read")
        def write(self):
            print("cdrom write")
    class Mem(Allfile):
        def read(self):
            print("mem read")
        def write(self):
            print("mem write")
    m1=Mem()
    m1.read()
    m1.write()
    
    mem read
    
    mem write
  • 相关阅读:
    Unity3D移动端海水的实时绘制
    NGUI 3.x 深度管理及渲染优化
    【入门】从学生到成熟:游戏模块设计起步之抽象思维 (转)
    正弦波近似 http://blog.csdn.net/ring0hx/article/details/44492415
    Stack 栈 ----Queue 队列
    ORM
    CBV&FBV
    Django路由系统
    CRM
    深浅拷贝
  • 原文地址:https://www.cnblogs.com/songzhixue/p/10058957.html
Copyright © 2011-2022 走看看