抽象类

Posted whylinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类相关的知识,希望对你有一定的参考价值。

# 抽象类
    # 一般情况下都是单继承 能实现的功能都是一样的
    # 抽象类也是一种规范,在python中实现起来与接口类类似
    # 多继承的情况 由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中.而单继承实现的功能都是一样的,所以在父类中
    # 不管是抽象类还是接口类都是面向对象的开发规范
    # 在python中没有接口类(但是为了规范,所以弄了接口类),在java中,因为java中没有多继承,所以创建了一个接口类来实现多继承
    # python中支持抽象类,且可以在抽象类中实现python代码

# 为什么要有抽象类
    # 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,抽取的内容包括数据属性和函数属性
    # 比如我们有香蕉的类、有苹果类、有桃子类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的香蕉、要么是吃一个具体的桃子,你永远无法吃到一个叫做水果的东西


from abc import abstractmethod, ABCMeta

# 抽象类,可以在类中实现部分代码(实际上,在python中接口类与抽象类实现是一样的(因为python中没有接口类,接口类是java弄的,java为了解决多继承而存在的),所以如果抽象类中可以实现部分代码,那么接口类其实也是可以实现部分代码的,但是因为接口类众所周知是不能实现方法的,所以我们默认不实现)
class All_file(metaclass=ABCMeta):
    @abstractmethod
    def read(self): # 子类必须实现read方法,否则实例化时报错
        print(haha)   # 可以实现部分代码

    @abstractmethod
    def write(self):# 子类必须实现read方法,否则实例化时报错
        pass

class Txt(All_file):
    def read(self): # 子类必须实现
        super().read()
        print(===)

    def write(self):
        print(++++)

t = Txt()
t.read()    # haha  ===

 

以上是关于抽象类的主要内容,如果未能解决你的问题,请参考以下文章

查看发票组代码后的总结和有感

使用 Git 来管理 Xcode 中的代码片段

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)

记一次抽象类中定义的静态变量,多个子类继承后,在方法中被重写引起的问题

Java 封装