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

    接口继承

    接口继承就是(基类)父类定义好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
  • 相关阅读:
    (转)Golang reflect.DeepEqual函数:判断两个值是否一致
    Kubernetes字段Finalizers
    校园电子屏无人值守模式探索
    史上最全测试开发工具推荐(含自动化、性能、稳定性、抓包)
    Java 将Word转为HTML的方法
    C# 在PPT中添加数学公式
    C# 将PPT转为OFD/DPT/DPS/ODP/POTX/UOP
    C# 将Excel转为OFD、UOS
    Java 扫描识别条形码图片
    C# 加载Word的3种方法
  • 原文地址:https://www.cnblogs.com/NumerOne/p/11465127.html
Copyright © 2011-2022 走看看