zoukankan      html  css  js  c++  java
  • python-接口类与抽象类

    在python中,可以通过继承来实现接口的方法,继承有两种用途:

    1、继承基类的方法——且作出自己的改变或扩展。好处:(代码重用)

    2、定义一个接口类(interface)——声明某个子类兼容于某个基类,这个基类定义了一些接口名(函数名)且未实现接口的功能,在子类继承接口类,且实现接口的功能。

    接口类——(接口继承)

      接口——实质上要求‘做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外调用者无需关心具体细节,可以一视同仁处理实现特定接口的所有对象——这在程序设计上,叫做归一化。

        归一化——使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合。

      5、归一化有什么好处:

        1、使用者不需关心对象的类是什么,只需要知道这些对象具备某些功能就可以了,降低使用者难度。

        2、使得使用者可以不加以区分所有接口兼容的对象那个集合。

            eg:开车这个动作,大家只需要学会怎么开车,而不用管开的是哪一类车,操作手法都一样。

    抽象类

      我们为什么要用抽象类呢?抽象类是用来干什么呢?

    什么是抽象类?

      1、抽象类就是从一堆类中抽取相同的内容,就成为一个抽象类。

      2、抽象类是一个特殊的类,特殊之处在于只能被继承,不能被实例化。

      用途:我们把类中抽取相同的内容,通过抽象类,可以统一起来一套标准给使用者使用。

    import abc  # 利用abc模块实现抽象类
    
    
    # 1. 定义一个抽象类
    class All_file(metaclass=abc.ABCMeta):
        all_type = 'file'
    
        @abc.abstractmethod  # 定义抽象方法,无需实现功能
        def read(self):
            '子类必须定义读功能'
            pass
    
        @abc.abstractmethod  # 定义抽象方法,无需实现功能
        def write(self):
            '子类必须定义写功能'
            pass
    
    
    # 2.定义子类的时候继承这个抽象类,但要必须要用抽象类中的方法。
    # 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)
    抽象类的实现方法
  • 相关阅读:
    关于《浪潮之巅》
    C++知识点
    #ifndef/#define/#endif以及#if defined/#else/#endif使用详解
    typedef void(*Fun)(void);
    C#-StructLayoutAttribute(结构体布局)
    Web Services
    C# DataGridView
    VS2017编译boost库
    位与字节
    c++ map
  • 原文地址:https://www.cnblogs.com/AYxing/p/8998873.html
Copyright © 2011-2022 走看看