Python实践106-抽象类

Python中的抽象类

  • 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化
  • 抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。
  • 定义抽象类,可以让其继承自模块abc的metaclass ABCMeta
  • abc还有一些装饰器:@abstractmethod 和 @abstarctproperty, 如果想要声明“抽象方法”,可以使用@abstractmethod,如果想声明“抽象属性”,可以使用 @abstractproperty 。
  • 抽象类的派生类,没有实现一个或者多个抽象方法,那么尝试实例化也将失败

举个栗子

from abc import ABCMeta, abstractmethod


class People(metaclass=ABCMeta):
    def __init__(self, name):
        self.name = name

    @abstractmethod
    def show_name(self):
        pass


class Student(People):
    def show_name(self):
        print('Student: {0}'.format(self.name))


class Teacher(People):
    def show_name(self):
        print('Teacher: {0}'.format(self.name))


if __name__ == '__main__':
    # TypeError: Can't instantiate abstract class People with abstract methods show_name
    # p = People("Python")

    student = Student("Li")
    student.show_name()

    teacher = Teacher("Wang")
    teacher.show_name()

代码地址

本系列文章和代码已经作为项目归档到github,仓库地址:jumper2014/PyCodeComplete。大家觉得有帮助就请在github上star一下,你的支持是我更新的动力。什么?你没有github账号?学习Python怎么可以没有github账号呢,快去注册一个啦!