美文网首页
python接口类与抽象类

python接口类与抽象类

作者: 泡沫上的幻影 | 来源:发表于2019-10-01 14:56 被阅读0次
    接口类和抽象类都是继承于 ABCMeta 元类

    1.抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。
    2.接口类可以多继承,抽象类一般使用单继承,不推荐多继承
    3.两者父类都不能被实例化,实例化就报错

    1.接口类

    案例一、

    from abc import abstractmethod,ABCMeta
    class Payment(metaclass=ABCMeta):     #元类 默认的元类 type
        @abstractmethod
        def pay(self):
            #不需要实现方法
            raise NotImplemented    #没有实现这个方法
    class Wechat:
        def pay(self,money):
            print('已经用微信支付了%s元'%money)
    class Alipay:
        def pay(self,money):
            print('已经用支付宝支付了%s元'%money)
    def pay(pay_obj,money):        #统一支付入口
        pay_obj.pay(money)
    wechat = Wechat()
    ali    = Alipay()
    pay(wechat,200)
    pay(ali,300)
    

    案例二、

    from abc import abstractmethod,ABCMeta
    class Swim_Animal(metaclass=ABCMeta):
        @abstractmethod
        def swim(self):
            pass
    swim_animal = Swim_Animal()
    class Walk_Animal(metaclass=ABCMeta):
        @abstractmethod
        def walk(self):
            pass
    walk_wnimal = Walk_Animal()
    class Fly_Animal(metaclass=ABCMeta):
        @abstractmethod
        def fly(self):
            pass
    fly_animal = Fly_Animal()
    
    class Tiger(Walk_Animal,Swim_Animal):
        def walk(self):
            pass
        def swim(self):
            pass
    class Swan(Walk_Animal,Fly_Animal,Swim_Animal):pass
    
    tiger = Tiger()
    tiger.walk()
    

    2.抽象类

    #一切皆文件
    import abc #利用abc模块实现抽象类
    
    class All_file(metaclass=abc.ABCMeta):
        all_type='file'
        @abc.abstractmethod #定义抽象方法,可以实现或无需实现功能
        def read(self):
            '子类必须定义读功能'
            pass
    
        @abc.abstractmethod #定义抽象方法,可以实现或无需实现功能
        def write(self):
            '子类必须定义写功能'
            pass
    
    # class Txt(All_file):
    #     pass
    #
    # t1=Txt() #报错,子类没有定义抽象方法
    
    class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('文本数据的读取方法')
    
        def write(self):
            print('文本数据的读取方法')
    
    class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('硬盘数据的读取方法')
    
        def write(self):
            print('硬盘数据的读取方法')
    
    class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('进程数据的读取方法')
    
        def write(self):
            print('进程数据的读取方法')
    
    wenbenwenjian=Txt()
    
    yingpanwenjian=Sata()
    
    jinchengwenjian=Process()
    
    #这样大家都是被归一化了,也就是一切皆文件的思想
    wenbenwenjian.read()
    yingpanwenjian.write()
    jinchengwenjian.read()
    
    print(wenbenwenjian.all_type)
    print(yingpanwenjian.all_type)
    print(jinchengwenjian.all_type)
    

    相关文章

      网友评论

          本文标题:python接口类与抽象类

          本文链接:https://www.haomeiwen.com/subject/cmukpctx.html